回顾一
1.写出你对java特性的认识
继承: 从已有的类中获取要继承数据的信息后创建新类的过程。(子类通过extends关键字继承父类可以被继承的属性和方法)
封装: 将类的细节隐藏起来,不让外界直接访问,而是提供get、set方法调用。
多态: 同一个引用类型,根据使用的实例不同而执行不同的操作。
抽象: 父类只提供方法,不提供实现,需要子类提供具体实现。
2.写出mvc模式的理解
m- model 模型
v- view 视图
c- controller 逻辑控制
一种设计理念,将模型、视图、数据处理分开
3.vue中的v-model和v-bind区别在哪里
v-model: 数据双向绑定,多用于表单
v-bind: 数据单向绑定,多用于样式
1:如果 id={{xxx}}这种写法,则HTML实际上是这样的:id="{{ xxx}}"
2: v-bind用于绑定属性和数据 ,其缩写为“ : ” 也就是v-bind:id === :id ;
3:如v-bind:class 可简写为 :class;当加上v-bind:之后,它的值class不是字符串,而是vue实例对应的data.class的这个变量。也就是说data.class是什么值,它就会给class属性传递什么值,当data.class发生变化的时候,class属性也发生变化,这非常适合用在通过css来实现动画效果的场合。他只是单向变动
4:v-model也可以绑定数据,但是他是用在表单控件上的,用于实现双向数据绑定,所以如果你用在除了表单控件以外的标签是没有任何效果的。
4.spring 的ioc注入方式有几种
- setter方法注入
- 构造方法注入
- xml配置(静态工厂)
- 注解:@Aurowired、@Resource、@Value
5.写出window.onload和和$(document).ready()的区别
执行时间: window.onload等待所有的dom和资源全部加载完毕后才执行,ready所有的dom节点加载完毕后就行。
编写个数: 如果有多个window.onload方法,只会其中执行一个;$(document).ready()可以同时编写多个,并且都可以得到执行。
简化写法: window.onload 没有简写,$(document).ready()有;
如 : $ (document).ready(function(){ })可以简写成$ (function(){方法体 });又因为JQuery的默认参数是document,则还可以写成$().ready(function{ })
回顾二
1.HashMap和HashTable的区别是什么;
相同
_两者都继承Map,key -value存储结构;
区别
_HashMap:线程不安全,效率高;
_hashTable线程安全,效率低
2.int和Integer是什么联系;
_int是Integer的基本数据类型
_Integer是int的包装类
3.线程同步有几种方式;
_synchronized:同步方法,同步代码块
4.请写出springmvc的工作流程;
接受请求–>前端控制器–>调用处理器映射器找到对应的Controller和方法(处理器)–>
调用处理器适配器–>返回ModelAndView–>前端控制器–>视图解析器–>展示
- 客户端发送请求至DispatcherServlet前端控制器
- DispatcherServlet收到请求后调用HandlerMapping处理器映射器
- HandlerMapping根据请求的url路径找到具体的处理器并返回给DispatcherServlet
- DispatcherServlet根据HandleAdapter处理器适配器调用处理器得到ModelAndView对象
- HandleAdapter将ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回view对象
- DispatcherServlet对view进行渲染响应至客户端
5.@RestController和@Controller有区别是什么
_@RestController:相当于@ResponseBody+@Controller,异步请求,返回具体的json对象。
_@Controller:只表明一个类、一个控制器,返回的是视图。
回顾三
1.什么是三次握手和四次挥手?
_一次握手:客户发送带有SYN标志的数据包到服务端(服务端=》确认client端发送正常,server端接受正常)
_二次握手:服务端发送带SYN/ACK标志的数据包到客户端(客户端=》确认client端发送、接受正常,server端接受、发送正常)
_三次握手:客户端发送带ACK标志的数据包到服务端(服务端=》确认client端发送、接受正常,server端发送、接受正常)
_一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传输。
_二次挥手:服务端收到这个FIN后回发一个ACK报文,并将确认序号设置为收到序号+1。
_三次挥手:服务端关闭与客户端的连接,发送一个FIN给客户端。
_四次挥手:客户端收到这个FIN后回发一个ACK报文,并将确认序号设置为收到序号+1.。
注:SYN:发送一个新连接,ACK确认序号有效,FIN释放一个连接。
2.TCP和UDP区别?
_TCP在传输数据之前要先建立连接,数据传输安全,数据传输后要释放连接。
_UDP在传输数据之前不需要建立连接,数据传输不安全。
3.Conection和Conections区别?
_Conection是集合类的上级接口,继承于它的接口主要有List、Set.
_Conections是集合工具类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
4.什么是跨平台?
_跨平台: 可以理解为在不同操作系统windows、linux、unix,不同版本型号32位、64位都能正常运行。
5.说下servlet生命周期?
_servlet生命周期:实例化new、初始化init、业务处理service,销毁destory.
6.说下类加载过程?
_加载——链接(验证、准备、解析)——初始化——使用——卸载
7.Http中,get和post方法区别?
请求方式 | get | post |
---|---|---|
url地址 | url地址参数暴露、有长度限制,可传播 | url地址参数隐藏,无长度限制,不可传播 |
安全性 | 低 | 高 |
数据传输 | 通过&拼接url传递参数 | 通过body体传递参数 |
后退页面反应 | 后退页面时,不产生影响 | 后退页面时,会重新提交请求 |
缓存性 | 可缓存 | 不可缓存 |
8.拷贝文件是字符流还是字节流?
_拷贝文件一般使用字节流,因为一般不清楚文件中是否包含音乐媒体等类型文件,所以统一使用字节流。
9.字节流、字符流分别是什么?
_字节流:字节流是由字节组成的,主要用来处理字节(二进制)数据。
_字符流:字符流是由字符组成的,主要用来处理字符(文字)数据。
10.线程创建的常用方式?
_继承Thread类
_实现Runnable接口
回顾四
1.Servlet API中forward()方法和redirect()方法的区别?
方法 | 转发(forward) | 重定向(redirect) |
---|---|---|
地址显示 | 客户端请求资源,服务端直接访问目标地址的URL并将读取的内容响应到浏览器展示(一次请求) | 客户端请求资源,服务端根据业务逻辑返回一个状态码给客户端,客户端根据原先的目标地址的URL重新发送请求(两次请求) |
数据共享 | 转发页面和转发到的页面数据可以在request域中共享 | 不可共享数据 |
运用场景 | 一般应用于用户登录时,根据角色直接转发到相应的模块 | 一般应用于用户退出登录时,重定向到首页或则登录页面 |
执行范围 | 只能在当前web应用内部资源之间转发 | 不仅可以重定向当前web应用内部的内部资源,还可以重定向应用同一个站点的其他资源,甚至可以通过绝对路径URL重定向其他站点资源 |
执行效率 | 高 | 低 |
2.JDBC访问数据库基本步骤是什么?
- 加载驱动
- 获取连接
- 编写sql语句
- 获取会话
- 处理结果集
- 关闭资源
3.什么是事务,JDBC中处理事务的步骤?
_事务是作为单个逻辑工作单元执行的一系列操作。
注:一个逻辑工作单元必须包含四个属性(ACID:原子性、一致性、隔离性、持久性)
_步骤:
- 设置提交方式为手动提交conn.setAutoCommit(false)
- 提交事务conn.commit()
- 出现异常、回滚事务conn.rollback()
4.说说AJAX的优缺点?
_优点:
- 页面无刷新、用户体验好
- 异步方式与服务器建立通信,具有更快的响应能力
- 可将服务端负担的工作转接到客户端,利用客户端闲置的能力进行处理;减轻服务端和带宽的负担,节约空间和宽带租用成本
- 基于标准化并被广泛支持的技术,不需要下载插件和小程序
_缺点:
- 不支持浏览器back按钮
- ajax暴露了与服务端的交互细节
- 对搜索引擎的支持比较弱
- 破坏了序列的异常机制
- 不容易调试
5.AJAX实现流程?
- 创建XMLHttpRequest对象
- 创建新的http请求
- 设置响应http请求变化的函数
- 发送http请求
- 获取异步调用返回的对象
- 使用js、dom实现局部刷新
6.什么是xml?
_xml是一种可扩展性标记语言,支持自定义标签(使用前必须预定义)使用 DTD 和 XML Schema 标准化 XML 结构。
7.关系数据库中连接池的机制是什么?
前提:为数据库连接建立一个缓冲池。
- 从连接池获取或创建可用连接
- 使用完毕之后,把连接返回给连接池
- 在系统关闭前,断开所有连接并释放连接占用的系统资源
- 能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。
8.HTTP的长连接和短连接
HTTP 协议有 HTTP/1.0 版本和 HTTP/1.1 版本。HTTP1.1 默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
9. Mybatis 的编程步骤是什么样的?
- 创建 SqlSessionFactory
- 通过 SqlSessionFactory 创建 SqlSession
- 通过sqlsession 执行数据库操作
- 调用session.commit()提交事务
- 调用session.close()关闭会话
10.使用 MyBatis 的 mapper 接口调用时有哪些要求?
- Mapper 接口方法名和mapper.xml 中定义的每个sql 的 id 相同
- Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同
- Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的resultType 的类型相同
- Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。
回顾五
1.谈谈你对shiro的理解?
_Shiro是Apahe公司出品的Java安全框架,它可以帮助我们完成认证、加密、授权、会话管理、与web集成、缓存等。
三个核心组件:Subject、SecurityManager 和 Realm
Subject:代表当前用户的安全操作。
SecurityManager:用来管理所有用户的安全操作。
Realm:充当着shiro与应用安全数据间的"桥梁"或则"连接器";也就是说,当用户执行认证(登录)和授权(访问控制)验证时,shiro会从应用配置的Realm中查找用户及其其权限信息。
2.SQL的select语句完整的执行顺序?
执行顺序:
-
from子句(来自哪个数据源的数据)
-
where子句(按照条件对数据进行筛选)
-
group by子句(将数据进行分组)
-
使用聚集函数进行计算
-
使用having子句进行分组
-
计算所有的表达式
-
select的字段
-
使用order by对结果集进行排序
3.Mysql中有几种隔离级别分别是什么?
_4种。
读未提交(read uncommitted):读未提交也叫脏读,就是指事务可以读取其他事务未提交的事务.
读已提交(read committed):读已提交就是指事务可以读取其他事务已提交的事务(相对于脏读也就是其他事务未提交的事务不可读取)。SQL Server数据库系统默认隔离级别就是读已提交。
可重复读(repeatable read):可重复读就是保证同一个事务执行多次相同查询的结果是一致的。Mysql数据库系统默认隔离级别就是可重复读。
可串行化(serializable):可串行化就是保证事务读取的范围内没有新的数据插入;比如事务第一次查询某个范围的数据,第二次查询也是同一范围的数据,在此之间没有插入新的数据到该范围内。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
read uncommitted(读未提交 | 是 | 是 | 是 |
read committed(读已提交 | 否 | 是 | 是 |
repeatable read(可重复读) | 否 | 否 | 是 |
serializable(可串行化) | 否 | 否 | 否 |
脏读:一个事务在读取数据时,对数据进行了修改还未提交;另一个事务对该未提交的数据进行了读取,则这个被读取的数据被称作“脏数据”,该过程称为“脏读”。
不可重复读:一个事务在多次读取数据时,对数据的操作还没有结束;另一个事务也对该数据进行了操作;则另一个事务对该数据的操作,对一个事务多次读取可能会产生影响的。
幻读:一个事务执行select操作,在同一范围多次读取数据的记录数不一样,这种现象称为“幻读”。
4.Mysql存储引擎有哪些?
- InnoDB存储引擎
- MyISAM存储引擎
- Memory(Heap)存储引擎
- NDB存储引擎
- Archive存储引擎
- Federated存储引擎
- Maria存储引擎
5.HTTP常见的状态码有哪些?
- 301MovedPermanently(永久移除),请求的URL已移走。Response中应该包含一个LocationURL, 说明资源现在所处的位置
- 302 found 重定向
- 400 Bad Request客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden服务器收到请求,但是拒绝提供服务
- 404 Not Found请求资源不存在,eg:输入了错误的URL
6.说说你对Java中反射的理解
Java中的反射首先是能够获取到Java中要反射类的字节码,获取字节码有三种方法,
- Class.forName(className)
- 类名.class
- this.getClass()。然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor等类,这些类提供了丰富的方法可以被我们所使用。
7.动静态代理的区别,什么场景使用?
静态代理
- 静态代理通常只代理一个类,静态代理事先知道要代理的是什么。
动态代理
- 动态代理是代理一个接口下的多个实现类。而动态代理不知道要代理什么东西.,只有在运行时才知道。
- 动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。
- 还有一种动态代理CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。
注:AOP编程就是基于动态代理实现的,比如著名的Spring框架、Hibernate框架等等都是动态代理的使用例子。
8.类什么时候被初始化?
- 创建类的实例,也就是new一个对象
- 访问某个类或接口的静态变量,或者对该静态变量赋值
- 调用类的静态方法
- 反射(Class.forName(“com.lyj.load”))
- 初始化一个类的子类(会首先初始化子类的父类)
- JVM启动时标明的启动类,即文件名和类名相同的那个类
9.Java是一种类型安全的语言,它有哪四类称为安全沙箱机制的安全机制来保证语言的安全性?
这四类安全沙箱分别是:
- 类加载体系
- .class文件检验器
- 内置于Java虚拟机(及语言)的安全特性
- 全管理器及Java API
10.Java中为什么会有GC机制呢?
- 安全性考虑;–for security.
- 减少内存泄露;–erase memory leak in some degree.
- 减少程序员工作量。–Programmers don’t worry about memory releasing.