Java高级面试题解析:Tomcat、Session与Cookie

需积分: 46 109 下载量 181 浏览量 更新于2024-07-20 3 收藏 132KB DOC 举报
"Java高级工程师面试题集合,涵盖了服务器、会话管理、HTTP报文结构以及请求转发与重定向等核心知识点。" 1. Tomcat,Apache,JBoss的区别: - Apache是一个标准的HTTP服务器,主要处理静态内容,如HTML、CSS、JavaScript等文件。 - Tomcat是一款轻量级的Web服务器,它能够处理JSP和Servlet,作为Servlet容器运行。 - JBoss则是一个更全面的应用服务器,除了支持Web服务外,还提供对EJB(Enterprise JavaBeans)和其他Java EE特性的支持。 2. Session与Cookie的区别: - Session是服务器端的存储机制,用于跟踪用户状态。每个用户会有一个唯一的Session ID,存储在服务器端,通常通过Cookie发送到客户端。 - Cookie是客户端存储机制,保存在用户的浏览器中,用于存储小量的数据,如用户首选项或登录状态。 - Session可以存储复杂对象,而Cookie只能存储字符串。 - 用户可以通过浏览器设置管理Cookie,但无法直接影响Session,因为Session由服务器管理。 - Session默认有超时时间,超时后Session会被清除,Cookie也可以设置过期时间。 3. HTTP报文结构: - Request Line(请求行):包含请求方法(GET、POST等)、URL和HTTP版本。 - Header Lines(头部行):包含各种请求头信息,如Accept、User-Agent、Cookie等。 - Blank Line(空行):分隔请求头和请求体。 - Request Body(请求体):在POST请求中,用于传递额外的数据。 4. sendRedirect与forward的区别: - forward(转发)是服务器端操作,浏览器只知道原始请求地址,不会看到转发后的新地址,感觉是在同一个页面内部进行操作。 - sendRedirect(重定向)会导致浏览器发起一个新的HTTP请求,地址栏会显示新的URL。 - forward效率较高,而sendRedirect更灵活,因为它是客户端的行为。 5. Java内存模型与对象实例化: - 在Java中,每次new操作都会在堆中创建一个新对象,因此实例化100次会产生100个对象。 - 对象的属性和方法(非静态)会随着每个对象的创建而创建,每个对象都有自己独立的一份副本。 - 如果属性和方法是静态的(使用static声明),它们在类加载时就会被初始化,并且在整个程序运行期间只有一份,所有对象共享同一份静态成员。 深入理解这些概念对于Java高级工程师来说至关重要,它们涉及到Web服务器的选择、用户会话管理、网络通信基础以及内存管理和对象实例化的影响。这些面试题反映了在实际工作中可能遇到的问题,也是评估候选人技术能力的重要依据。
2016-10-12 上传
绝对想你所想,超乎想象!够详细,够给力! 目录 1. Jvm内存空间结构是什么样的? 1 程序计数器 1 Java栈 1 本地方法栈 2 堆 2 方法区 3 2. Jvm堆内存的划分结构和优化 3 2.1. 原理 6 2.1.1. 年轻代 6 2.1.2. 年老代 6 2.1.3. 持久代 7 2.2. 参数说明 8 2.3. 疑问解答 9 2.4. 垃圾回收器选择 10 2.4.1. 串行收集器 10 2.4.2. 并行收集器(吞吐量优先) 10 2.4.3. 并发收集器(响应时间优先) 11 2.4.4. 其它垃圾回收参数 11 2.5. 辅助信息参数设置 12 2.6. 关于参数名称等 13 3. JVM服务参数调优实战 14 3.1. 大型网站服务器案例 14 3.2. 内部集成构建服务器案例 15 4. 常量池在jvm的哪个空间里边? 17 5. jvm垃圾回收是什么时候触发的? 17 5.1. 那究竟GC为我们做了什么操作呢? 17 5.1.1. Jvm怎么判断对象可以回收了? 18 5.2. 下面我们来看一下几种垃圾收集算法 18 5.2.1. 在JDK1.2之前,使用的是引用计数器算法, 18 5.2.2. 根搜索算法 19 5.2.3. 引用的分类 19 5.3. 方法区也是会被回收的 20 5.4. 下面我们来逐一介绍一下每个垃圾回收器。 22 5.4.1. 1、 Serial收集器 22 5.4.2. 2、 ParNew收集器 23 5.4.3. 3、 ParallelScavenge 23 5.4.4. 4、 ParallelOld 24 5.4.5. 5、 SerialOld 24 5.4.6. 6、CMS 24 5.4.7. 7、 GarbageFirst(G1 ) 26 6. 常量池如何触发的垃圾回收? 28 7. 垃圾回收从哪里开始检测树进行回收?根节点是什么? 28 7.1. 目前java中可作为GC Root的对象有 29 8. Redis怎么判断对象可以清理了? 29 9. Redis怎么提高命中率? 29 10. Finalize中调用垃圾回收方法,再调用方法会回收么? 29 11. Int进行自增操作,如何保证线程安全? 30 12. Int a=1是原子方法,布尔类型进行赋值是原子方法么? 30 12.1. 多线程原子操作的安全性 31 13. Cas怎么实现unsafe? 32 13.1. Unsafe 32 13.2. CAS 32 13.3. 由CAS分析AtomicInteger原理 33 13.4. CAS的缺点 35 14. Map数据结构? 35 14.1. 一、定义 36 14.2. 二、构造函数 36 14.3. 三、数据结构 36 14.4. 四、存储实现:put(key,vlaue) 38 14.5. 五、读取实现:get(key) 41 15. 一百万数据放Arraylist数组,怎么放? 在哪个代? 42 15.1.1. 调整数组容量 42 16. Hashmap和 concurrentHashmap除了线程安全 还有什么区别,put的时候是怎么处理的。 43 17. 数据库组合索引,储存在一个叶子节点还是多个? 44 17.1. 索引的利弊与如何判定,是否需要索引: 44 17.1.1. 索引的好处 44 17.1.2. 索引的弊端 44 17.1.3. 如何判定是否须要创建索引 44 17.2. 复合索引优化 45 17.3. 下面是一些常见的索引限制问题 45 17.3.1. 使用不等于操作符(<>, !=) 45 17.3.2. 使用 is null 或 is not null 45 17.3.3. 使用函数 45 17.3.4. 比较不匹配的数据类型 46 17.4. 关于索引的排序 46 18. 数据库没有orderby默认如何排序。 46 19. 分布式事务如何实现。 46 19.1. 1 事务/分布式事务 47 19.1.1. 1.1 事务 47 19.1.2. 1.2 分布式事务与 XA 规范 47 19.2. 2 两阶段提交协议 47 19.2.1. 2.1 预提交阶段 48 19.2.2. 2.2 提交阶段 48 19.3. 3 分布式事务应用框架 48 19.3.1. 3.1 角色 48 19.3.2. 3.2 交互时序 49 19.3.3. 3.3 关键点 50 19.3.4. 参考 50 20. Jvm底层源码 51 21. 二叉树怎么实现的? 51 22. Executourservice 数据结构。哪种只能执行一个线程。 Cache怎么实现的 fixed线程如果中断,线程回自己销毁么? 51 23. 栅栏的原理和实现。 51 23.1. 1. CyclicBarrier简介 51 23.2. 2. CyclicBarrier数据结构 52 23.3. 3. CyclicBarrier源码分析(基于JDK1.7.0_40) 52 23.3.1. 3.1 构造函数 52 23.3.2. 3.2 等待函数 53 23.4. 4. CyclicBarrier的使用示例 57 23.4.1. 示例1 57 23.4.2. 示例2 59 24. Blockingqueue有几种形式?各自的编码方式。 72 24.1. Queue接口 72 24.2. BlockingQueue接口 73 24.2.1. ArrayBlockingQueue 74 24.2.2. LinkedBlockingQueue 78 24.2.3. LinkedBlockingDeque(双向并发阻塞队列) 84 24.2.4. PriorityBlockingQueue(优先阻塞队列) 85 24.2.5. 总结一下阻塞队列 90 25. Tomcat 如何管理servlet? 90 26. Servlet生命周期 90 27. 没有缓存,如何实现领券并发操作? 92