一、反射
1.什么是反射? 在运行时,对于任何一个类,知道这个类的方法和属性,并且能够调用,这种动态的获取类的方法和属性被称作反射; 2.什么是 java 序列化?什么情况下需要序列化? 把对象表示为一串字节序列,当需要把对象保存到文件中时进行序列化,通过反序列化就可以取出对象; 3.动态代理是什么?有哪些应用?怎么实现动态代理? 运行时动态的生成代理类,不修改目标类的原有代码,便于灵活,解耦的方式统一管理一批类需要共同实现的方法; 可以统计api的共同耗时,限流,生成日志管理,也能用于日志管理;
主要有jdk动态代理,clgb动态代理; Proxy.newProxyInstance(类加载器,目标类接口,InvocationHandler); InvocationHandler重要方法invoke(); 生成代理类,代理执行目标类的方法,method.invoke代替原有目标类方法执行,在这个方法前后加入公共方法,这就是jdk动态代理; AOP实现了jdk动态代理和cgLib动态代理两种,当类有接口时,默认实现jdk动态代理, 否则实现cgLib动态代理: cgLib原理:动态生成一个代理类的子类,子类重写要代理的类所哟有不是final的方法,在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。 二、对象拷贝
5.为什么要使用克隆? 想对对象进行操作,又想保留原有数据做其他操作,此时就要进行克隆,以免前面的操作修改到了对象实例; 6.如何实现对象克隆? ①实现Cloneable接口并且重写clone方法; ②实现Serializable接口,通过对象的序列化和反序列化实现克隆; 7.深拷贝和浅拷贝区别是什么? 浅拷贝复制引用地址,修改其中任意的值,另一个值也会随之改变; 深拷贝:复制对象的值,那么拷贝的部分任意修改不会影响到原有的值; 8.jsp 和 servlet 有什么区别? ①jsp经过编译就是servlet; ②jsp擅长显示,servlet擅长逻辑层; ③.Jsp中的有内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到. ④Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。 9.jsp 有哪些内置对象?作用分别是什么? jsp预定义了9个内置对象:request、response、session、application、out、pagecontext、config、page、exception; ①. request:请求:HttpServletRequest的实例,用于后端接收客户端发过来的请求; ②. response:响应:HttpServletResponse的实例,用于后端相应给客户端的响应; ③. session:会话: ④. applaction:全局 ⑤. config;配置 ⑥. page;当前页面 三、异常 18.throw 和 throws 的区别? throw :抛出一个异常; throws:方法可能抛出异常的声明; 19.final、finally、finalize 有什么区别? final:修饰类的时候是个最终类,不能被继承,修饰变量就是个常量,修饰方法就是最终方法不能被重写; finally:最终执行代码,用于try,catch中来使用;表示无论如何都必须执行的代码,即使try或者catch中加了return,或者try,catch中报了异常,finally类都会执行里面的代码;一般用于关闭资源用; 20.try-catch-finally 中哪个部分可以省略? catch 和 finally都可以省略; 21.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 会执行 22.常见的异常类有哪些? NullPointerException :应用对象访问空对象的时候会抛出的异常; NumberFormatException:将非数字字符串强转为数字; ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。 SQLException 提供关于数据库访问错误或其他错误信息的异常。 四、网络
23.http 响应码 301 和 302 代表的是什么?有什么区别? 301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址; 301表示旧地址已经失效被移除了,302表示旧地址依旧可以用; 24.forward 和 redirect 的区别? forward和redirect 代表了servlet中的两种跳转方式; forward代表转发,是服务器上的行为;
1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
25.简述 tcp 和 udp的区别? UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。 优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送 缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数 据是否会正确接收,也不重复发送,不可靠。 适用:视频,语音通话等及时生效,丢失部分信息也没有关系;不保证顺序性和正确性;
TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手 优点:TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。 缺点:TCP相对于UDP速度慢一点,要求系统资源较多。 适用:传输重要数据,不允许出现纰漏,保证正确性和顺序性;
26.tcp 为什么要三次握手,两次不行吗?为什么? 第一次握手:客户端主动向服务器发起; 第二次握手:服务端在接收到客户端的请求后,发送应答给客户端; 第三次握手:客户端接收到服务端接收到服务端发送的应答,客户端就可以发送消息了; 所以两次握手肯定是不行的,客户端必须要知道服务端目前的状态是否准备好连接了,而要达到这一步至少要三步;
27.说一下 tcp 粘包是怎么产生的? TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方。应用程读取缓存中的数据包的速度小于接收数据包的速度,缓存中的多个数据包会被应用程序当成一个包一次读取 28.OSI 的七层模型都有哪些? 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 用户接口 数据表现形式(加密) 对应用会话的管理 传输前的错误检测,流控 提供逻辑地址 用MAC地址访问媒介 设备与设备之间的物理连接 29.get 和 post 请求有哪些区别? 最重要的区别,get把请求放在了连接上,post则是把请求数据放在了request body 体里面;post比get来的安全; get请求数据的大小取决于浏览器对链接的限制,一般浏览器限制链接不超过2K,post理论上是无限的,实际上IIS4中最大量为80KB,IIS5中为100KB; GET只接受ASCII字符的参数的数据类型,而POST没有限制; GET产生的URL地址可以被Bookmark,而POST不可以; GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留; GET的效率要比post高;