Java知识点总结(二)

1 简单说一下html,css,js在网页开发中的定位?

html定义结构,css定义样式,js验证表单,动态交互(ajax)

2 简单介绍下ajax

  • ajax
    Ajax定义:异步javascript和xml
    Ajax作用:使用ajax,可以局部刷新。
    怎么实现:Ajax XmlHttpRequest对象,使用这个对象可以异步向服务器发送请求,获取响应,完成局部更新,Open send responseText/responseXML局部响应
    使用场景 登录失败不跳转页面,注册时提示用户名是否存在,二级联动等等。
  • js和jQuery的关系
    jQuery是一个js框架,封装了js的属性和方法,并且增强了js的功能,让用户使用起来更加便利。
    原理:使用js要处理很多兼容问题,由jQuery封装了底层,不用处理兼容性问题,
    原生js的dom和事件绑定等操作非常麻烦,jQuery封装以后操作非常方便。

3 jQuery的页面加载完毕事件?

很多时候我们获取元素,但是必须要等钙元素被加载完成后才能获取,我们可以把js代码放到该元素的后面,但是这样就会造成js在我们的body中储存在不好管理,所有页面加载完毕后,所有元素当然已经加载完毕,一般获取元素做操作都要在页面加载完毕后操作。

第一种:
$(document).ready(function(){
	
});
$(document)把原生的document这个dom对象转换为jQuery对象,转换完成后,才能调用ready方法。
ready(fn),表示的是页面结构被加载完毕后执行传入的函数。
第二种:
$(function(){
})
当页面加载完毕后执行里面的函数。
和window.onload的区别
1、jQuery中的页面加载完毕事件,表示页面结构被加载完毕
2、window.onload表示的是页面被加载完毕。(包括加载图像,声音,等远程资源)

4 Jquery的Ajax和原生js实现的ajax有什么关系?

如果采用原生js实现Ajax是非常麻烦的,并且每次都是一样的,如果我们不使用jQuery,我们也要封装对象的方法和属性,有像jQuery这些已经封装完成,并且经过很多企业实际使用的框架,比较靠谱并且开源,我们就不需要封装,直接使用成熟的(jQuery)即可。

5 简单说一下html5?你对现在的新技术有哪些了解?

html5是最新版本的html,是在原来html4的基础上增强了一些标签。
html5增加了像画板、声音、视频、web存储等高级高能,但是html5有一个不好的地方,那就是html5太强调语义,导致开发者不知道要选择哪个标签。之前是,页面布局无论头部,导航主题等都是用div,html5的规范则要求使用不同的标签表示(footer,header)。

6 简单说一下css3

css3是最新版本的css,是对原来css2的功能增强。
css3提供了一些原来在css2中实现比较困难或者不能实现的功能。
1、盒子边框
2、盒子和文字的阴影
3、渐变
4、转换:移动,缩放,旋转。
5、动画、过渡都可以实现动画
6、可以使用媒体查询实现响应式网站。
css3最大缺点:就是要根据不同的浏览器处理兼容。

7 bootstrap是什么?

bootstrap是一个移动设备优先的UI框架,我们可以不用任何css,js代码就可以实现比较漂亮有交互性的页面,我们程序员对页面的编写是有硬伤的,所以要自己写页面的话就要使用类似于bootstrap这样的ui框架。
平时用的很多的:
1、模态框
2、表单,表单项
3、布局
4、栅格系统

框架部分

8 MVC模式

最简单、最经典的就是jsp(view)+servlet(controller)+javabean(model)
1、当控制器收到来自用户的请求后
2、控制器调用javabean完成业务
3、完成业务后通过跳转jsp页面的方式给用户反馈信息
4、jsp页面给用户做出响应
传统mvc模式存在的问题
在这里插入图片描述
常用的mvc框架有struts2,springmvc。

struts2响应流程:
1、浏览器发送请求,经过一些列的过滤器后,到达核心过滤器(StrutsPrepareAndExecuteFilter).
2、StrutsPrepareAndExecuteFilter通过ActionMapper判断当前的请求是否需要某个Action处理,如果不需要,则走原来流程,如果需要,则把请求交给ActionProxy来出来
3、ActionProxy通过Configuration Manager询问框架的配置文件stuts.xml,找到需要调用的Action类。
4、创建一个ActionInvocation实例,来调用Action对应的方法来获取结果集的name,在调用前会执行一些拦截器,
5、通过结果集的Name,找到对应的结果集来对浏览器进行响应。

拦截、判断、寻找、执行、响应。

9 struts2中的拦截器,用来干嘛?

面试:
struts2中的功能(参数处理,文件上传,字符编码),都是通过系统拦截器实现的。
如果也无需要,当然我们也可以自定义拦截器,通过动态配置方式,可在执行Action的方法前后,,加入相关逻辑完成业务。
使用场景:1、用户登录判断,在执行Action的前面判断是否已经登录,如果没有登录,则跳转到登录页面。
2、用户权限判断,在执行Action的前面判断是否具有,如果没有权限就给出提示信息
3、操作日志。

10 简单讲一下springMVC的执行流程

在这里插入图片描述
1、向服务器请求。
在这里插入图片描述
记忆技巧:
核心控制器(DispatchServlet)捕获请求、(HandlerMapper)查找Handler、(HandlerAdapter)执行Handler、(DispatchServlet)选择合适的ViewResolver,通过ViewResolver渲染视图并返回。

11 struts2和springMVC有什么不同?

1.核心控制器不同
struts2是filter-------springMVC是Servlet
2. 控制器实例不同(单实例,多实例):
sturts2基于实例,每次发一次请求都会实例一个action,每个action都会被注入属性
spring更像servlet一样,只有一个实例,每次请求执行对应的方法即可。
3. 管理方式
springmvc是spring中的一个模块,spring对于springmvc的控制器管理更加简单方便,struts2需要采用xml很多的配置参数来管理。
4. 参数传递
struts2使用valueStack进行传递和赋值,而springmvc是通过方法进行接收。

12 Spring的两大核心

Spring是什么?
spring是J2EE应用程序框架,是轻量级ioc和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可单独使用,也可以和struts框架,ibatis框架等组合使用。

1、IOC(Inversion of Control)或DI(Dependency Injection)
IOC控制权反转,
原来:我的service需要调用dao,service就要创建dao
spring:spring发现service依赖于dao,就给你注入。
核心原理:就是配置文件+反射(工厂也可以)+容器(map)
2、AOP:面向切面编程
核心原理:使用动态代理的方式,在执行前后或出现异常后做相关逻辑。
我们主要使用AOP来做
1、事务管理。执行方法前,开启事务,执行完成后关闭事务,出现异常后回滚事务。
2、权限判断。在执行方法前,判断是否具有权限。
3、日志。在执行前进行日志处理。

13 Spring的事务隔离级别

多个事务存在,是怎么处理的策略。
在这里插入图片描述

14 什么是ORM?

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
ORM框架:为了解决面向对象与关系数据库存在的互不匹配的现象的框架。
Java典型的ORM框架有:hibernate,ibatis(mybatis),speedframework

15 mybatis与hibernate有什么不同

相同点:都是java中的orm框架,屏蔽jdbcapi的底层访问细节,使我们不用与jdbcapi打交道,就可以完成对数据库的持久化操作。
不同点:
1、hibernate要比mybatis功能强大很多,因为hibernate自动生成sql语句。
2、mybaits需要自己在xml配置文件中写sql语句,hibernate我们无法直接控制该语句,我们无法写特定高效的sql。。

16 hibernate映射对象的状态

在这里插入图片描述
在这里插入图片描述

17 为什么要使用hibernate缓存

为了提高访问速度,把磁盘或数据库访问变成内存访问。
hibernate缓存包括两大类,
hibernate一级缓存和hibernate二级缓存
1.hibernate一级缓存又称为session的缓存
session缓存内置不能被卸载,session的缓存是事务范围的缓存(session对象的生命周期通常对应一个数据库事务或者一个应用事务)
一级缓存中欧,持久化类的每个实例都具有唯一的OID。
2.Hibernate二级缓存又称为“SessionFactory的缓存”
Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略。
二级缓存是可选的,默认不开启这个插件。
面试:
hibernate中的缓存分为一级缓存和二级缓存,
一级缓存就是session级别的缓存,在事务范围内有效,是内置的不能被卸载,二级缓存是sessionFactory级别的缓存,用应用启动到应用结束有效果。是可选的,默认没有二级缓存,需要手动开启。

保存数据库后,在内存中保存一份,如果更新了数据库就要同步更新。。
什么样的数据适合放在第二级缓存中?
1)很少被修改的数据
2)经常被查询的数据。

18 webservice的使用场景

webservice是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可实现不同的语言间的相互调用,通过Integernet进行基于Http协议的网络应用间的交互。
1、异构系统(不同客户端)的整合
2、不同客户端的整合 浏览器、手机端(Android,iOS,塞班),微信端,pc端等来访问。

在这里插入图片描述
3、
4、实在的例子
天气预报:可以通过实现webservice客户端调用远程天气预报。
单点登录:一个服务是所有系统的登录。

19 activity简单介绍

在这里插入图片描述

高级部分

20 有没有使用过linux?用来干嘛

linux是一个长时间运行比较稳定的操作系统,所以我们一般会拿它来作为服务器(web,db,app等)
linux常用命令

pwd获取当前路径
cd跳转到目录
su -u切换到管理员
ls 列举目录
文件操作命令
tail 查看
rm -rf
vi
文件夹
mkdir
rm -r

21你是使用什么来连接远程linux服务器的?

需要依赖于服务器安装ssh服务端,一般这个ssh服务的端口为22
需要依赖于服务器安装sftp服务端,一般这个sftp服务的端口为25
使用ssh客户端连接linux服务器。有点像windows下的远程连接。但是linux通过ssh连接上以后是没有图形界面的,全是命令行。(putty,xshel)
使用sftp客户端来连接sftp服务端,来上传文件和下载文件。(上传安装包,修改配置文件上传)
企业中常用哦的两种组合:putty+winscp
xshell+xftp
面试:使用xshell、putty等ssh客户端来连接服务器,使用xftp,winscp等sftp客户端来上传和下载文件。连接和上传必须需依赖于服务器的ssh、sftp服务器,也就是服务器需要启动这两个服务。。

22 有没有做过数据库优化方面的事情呢?

定位 : 查找、定位慢查询
优化:
1、创建索引:创建合适的索引,我们就可以在索引中查询,查询以后直接找到对应的记录
2、分表:当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水平分表和垂直分表来优化
3、读写分离:当一台服务器不能满足需求时,采用读写分离方式进行集群。
4、缓存:使用redis来运行缓存

一些常用的优化技巧:

23 查找并定位慢查询、

在项目自验项目转测试之前,在启动mysql数据库时开启慢查询,并且把执行慢的sql语句写到日志中,在运行一段时间后,通过查看日志,找到慢查询语句。
使用explain +慢查询语句,来详细分析语句的问题。

在这里插入图片描述

MyISAM和INNODB的区别
1.事务安全 myisam不支持事务而innodb支持
2.查询和添加速度 每一傻帽不用支持事务就不用考虑同步,查找和添加的速度快
3.支持全文索引:myisam支持,innodb不支持。
4.锁机制 myisam支持表锁,innodb支持行锁(事务)
5.外键:myisam不支持外键,innodb支持外键

24 数据库优化之创建合适的索引?

在这里插入图片描述

25 索引的使用场景

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

26 数据库之分表

分表分为水平分表(按行)和垂直分表(按列)

根据经验,Mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉;水平分表能很大程度减轻这些压力。
按行数据进行分表:
1,按时间分表
在这里插入图片描述
2,按区间范围分表
比如
table_1 user_id :1-100w
table_2 user_id: 2-300w
……

3,hash分表
通过一个原始目标的ID或者名称通过一定的hash算法计算出存储表的表名,然后访问相应的表。

如果一张表中某个字段值非常多(长文本,二进制等),而且只有在很少的情况下回查询,这时候就恶意把字段多个单独放到一张表,通过外键关联起来。比如:考试详情,我们一般关注分数,不关注详情。

27 数据库优化之读写分离

一台数据库支持的最大并发连接数是有限的,如果用户并发访问太多,一台服务器满足不了要求,就可以使用集群处理,Mysql的集群处理技术最常用的就是读写分离。
主从同步:
数据库最终会把数据库持久化到磁盘,如果集群必须确保每个数据库服务器的数据是一致的。能改变数据库的操作都往主数据库上写,而其他的数据库从主数据库上同步数据。

读写分离:
使用负载均衡来实现读写的操作都往主数据库去,而读的操作往从服务器去。

28 数据库优化之缓存

在这里插入图片描述
Java中常用的缓存

1,hibernate的二级缓存,该缓存不能完成分布式缓存
2,可以使用redis来作为中央缓存

29 语句优化小技巧

DDL优化:
在这里插入图片描述
DML优化,
将多次添加一次完成。

30 jdbc批量插入几百万条数据该怎么实现?***

1、遍多次提交为一次
2、使用批量操作

有没有使用过redis?Redis是什么

Redis是一个key-value的nosql数据库,先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多。
主要用来做缓存数据库的数据和web集群时当做中央缓存存放session.
使用场景:
缓存:
把经常要查询的,很少修改的数据,放到读速度很快的空间(内存),以便下次访问减少时间,减轻压力,减少访问时间。
计数器:
redis中的计数器是原子性的内存操作。
可以解决数据库溢出问题,进销存系统溢出。
session缓存服务器:在这里插入图片描述
web集群时作为session缓存服务器。

redis 对象保存方式

Json字符串:
需要把对象转换为json字符串,当做字符串处理,直接使用set get来设置或者获取。
优点:操作简单
缺点:没有提供专门的方法,需要把对象转化为json(jsonlib)。

字节:
需要做序列化,就是把对象序列化为字节保存。

redis自身有数据淘汰机制

因为内存大小有限,需要保存有效的数据,就会进行数据淘汰。。
在这里插入图片描述

在这里插入图片描述

31 微信公众号分类

公众号:个人和企业都可以申请
服务号:企业才能申请
企业号:企业才能申请

微信开发原理
在这里插入图片描述

微信公众号平台开发者,通过接入认证的方式,让我们的服务器能够处理来自微信服务器转发的微信用户的请求,处理完成后返回给微信服务器,由微信服务器对用户响应。

版权声明:本文为pan_xi_yi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pan_xi_yi/article/details/90271559