Java面试知识点总结②——Java高级

49 篇文章 0 订阅
49 篇文章 0 订阅

大纲

  • [x] 一、Java基础(语言、集合框架、OOP、设计模式等)
  • [x] 二、Java高级(JavaEE、框架、服务器、工具等)
  • [x] 三、多线程和并发
  • [x] 四、Java虚拟机
  • [x] 五、数据库(Sql、MySQL、Redis等)
  • [x] 六、算法与数据结构
  • [x] 七、计算机网络
  • [x] 八、操作系统(OS基础、Linux等)
  • [x] 九、其他

二、Java高级(JavaEE、框架、服务器、工具等)

1. Servlet

1.1 Servlet继承实现结构

Servlet (接口)             -->      init|service|destroy方法
GenericServlet(抽象类)  -->       与协议无关的Servlet
HttpServlet(抽象类)        -->         实现了http协议
自定义Servlet            -->         重写doGet/doPost

1.2 编写Servlet的步骤

  1. 继承HttpServlet
  2. 重写doGet/doPost方法
  3. 在web.xml中注册Servlet

1.3 Servlet生命周期

  1. init:仅执行一次,负责装载servlet时初始化servlet对象
  2. service:核心方法,一般get/post两种方式
  3. destroy:停止并卸载servlet,释放资源

1.4 过程

  1. 客户端request请求 -> 服务器检查Servlet实例是否存在 -> 若存在调用相应service方法 -> 服务结束
  2. 客户端request请求 -> 服务器检查Servlet实例是否存在 -> 若不存在装载Servlet类并创建实例 -> 调用init初始化 -> 调用service -> 服务结束

1.5 doPost方法要抛出的异常:ServletExcception、IOException

1.6 Servlet容器什么时候装载装载Servlet

  1. web.xml中配置load-on-startup启动时装载
  2. 客户首次向Servlet发送请求
  3. Servlet类文件被更新后, 重新装载Servlet

1.7 HttpServlet容器响应web客户请求流程

  1. Web客户向servlet容器发出http请求
  2. servlet容器解析Web客户的http请求
  3. servlet容器创建一个HttpRequest对象, 封装http请求信息
  4. servlet容器创建一个HttpResponse对象
  5. servlet容器调用HttpServlet的service方法, 把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
  6. HttpServlet调用httprequest的有关方法, 获取http请求信息
  7. httpservlet调用httpresponse的有关方法, 生成响应数据
  8. Servlet容器把HttpServlet的响应结果传给web客户

1.8 HttpServletRequest完成的一些功能

  1. request.getCookie()
  2. request.getHeader(String s)
  3. request.getContextPath()
  4. request.getSession()
HttpSession session = request.getSession(boolean create)
返回当前请求的会话

1.9 HttpServletResponse完成一些的功能

  1. 设http响应头
  2. 设置Cookie
  3. 输出返回数据

1.10 Servlet与JSP九大内置对象的关系

JSP对象 怎样获得

1. out                ->        response.getWriter
2. request             ->        Service方法中的req参数
3. response         ->        Service方法中的resp参数
4. session             ->        request.getSession
5. application         ->        getServletContext
6. exception         ->        Throwable
7. page              ->        this
8. pageContext      ->        PageContext
9. Config             ->        getServletConfig

exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用。

2. JSP

JSP的前身就是Servlet

3. Tomcat

3.1 Tomcat容器的等级

Tomcat - Container - Engine - Host - Servlet - 多个Context(一个Context对应一个web工程)-Wrapper

4. struts

  1. struts可进行文件上传
  2. struts基于MVC模式
  3. struts让流程结构更清晰
  4. struts有许多action类, 会增加类文件数目

5. Hibernate的7大鼓励措施

  1. 尽量使用many-to-one, 避免使用单项one-to-many
  2. 灵活使用单项one-to-many
  3. 不用一对一, 使用多对一代替一对一
  4. 配置对象缓存, 不使用集合对象
  5. 一对多使用bag, 多对一使用set
  6. 继承使用显示多态
  7. 消除大表, 使用二级缓存

6. Hibernate延迟加载

  1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
  2. Hibernate3 提供了属性的延迟加载功能
    当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
  3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
  4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

7. Java 中,DOM 和 SAX 解析器有什么不同?

DOM 解析器将整个 XML 文档加载到内存来创建一棵 DOM 模型树,这样可以更快的查找节点和修改 XML 结构,而 SAX 解析器是一个基于事件的解析器,不会将整个 XML 文档加载到内存。由于这个原因,DOM 比 SAX 更快,也要求更多的内存,但不适合于解析大的 XML 文件。

8. Java 中,Maven 和 Ant 有什么区别?

虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多,在基于“约定优于配置”的概念下,提供标准的 Java 项目结构,同时能为应用自动管理依赖(应用中所依赖的 JAR 文件)。

9. 解析XML不同方式对比

DOM、SAX、JDOM、DOM4J

  • [x] DOM DOM树驻留内存

可以进行修改和写入,耗费内存。

步骤:创建DocumentBuilderFactory对象 -> 创建DocumentBuilder对象 -> Document document = db.parse("xml")

  • [x] SAX 事件驱动模式

获取一个SAXParserFactory工厂的实例 -> 根据该实例获取SAXParser -> 创建Handler对象 -> 调用SAXParser的parse方法解析

用于读取节点数据 不易编码 事件有顺序 很难同时访问xml的多处数据

  • [x] JDOM

创建一个SAXBuilder的对象 -> 创建一个输入流,加载xml文件 ->通过saxBuilder的build方法将输入流加载至saxBuilder并接收Document对象

使用具体类而不使用接口

  • [x] DOM4J

通过SAXReader的read方法加载xml文件并获取document对象

使用接口和抽象类,灵活性好,功能强大

10. Nginx相关

请参考我的Nginx

11. XML与JSON对比和区别

XML

1)应用广泛,可扩展性强,被广泛应用各种场合
2)读取、解析没有JSON快
3)可读性强,可描述复杂结构

JSON

1)结构简单,都是键值对
2)读取、解析速度快,很多语言支持
3)传输数据量小,传输速率大大提高
4)描述复杂结构能力较弱

JavaScript、PHP等原生支持,简化了读取解析。成为当前互联网时代普遍应用的数据结构。

【感谢您能看完,如果能够帮到您,麻烦点个赞~】

更多经验技术欢迎前来共同学习交流:一点课堂-为梦想而奋斗的在线学习平台 http://www.yidiankt.com/

![关注公众号,回复“1”免费领取-【java核心知识点】]file

QQ讨论群:616683098

QQ:3184402434

想要深入学习的同学们可以加我QQ一起学习讨论~还有全套资源分享,经验探讨,等你哦!在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值