Java面试必备:核心知识点大盘点

需积分: 0 6 下载量 121 浏览量 更新于2024-07-30 收藏 483KB DOC 举报
"java面试笔试题大汇总" 在Java面试和笔试中,掌握各种核心概念和技术是至关重要的。以下是一些常见的Java面试题及其解析: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明变量、方法或类不可改变。对于变量,一旦赋值后不能更改;对于方法,表示该方法不能被重写;对于类,表示该类不能有子类。 - `finally` 是用于异常处理的,无论是否发生异常,finally块中的代码总会被执行,确保关键代码的执行。 - `finalize` 是Object类的一个方法,用于对象被垃圾收集器回收前进行清理工作,但不保证一定会调用。 2. **AnonymousInnerClass(匿名内部类)**: - 匿名内部类没有名字,可以直接实现接口或者继承类,并且通常用于一次性定义的地方。它可以拥有局部变量,但必须是final的。 3. **StaticNestedClass和Inner Class的不同**: - 内部类(Inner Class)是嵌套在另一个类中的类,它可以访问外部类的所有成员,包括私有成员。内部类实例化时需要外部类的实例。 - 静态嵌套类(Static Nested Class)是内部类的静态形式,它不持有对外部类的引用,因此可以独立于外部类实例化。 4. **&和&&的区别**: - `&` 是位运算符,用于按位与操作,也可作为逻辑与运算符,但在表达式中会被立即求值。 - `&&` 是短路逻辑与运算符,如果第一个操作数为假,不会评估第二个操作数。 5. **HashMap和Hashtable的区别**: - HashMap是非同步的,允许null键和null值,迭代时元素顺序是不确定的。 - Hashtable是同步的,不允许null键和null值,迭代时元素按照插入顺序排序。 6. **Collection和Collections的区别**: - Collection 是所有集合框架接口的根接口,代表一组对象的集合。 - Collections 是一个工具类,提供了很多静态方法,用于操作集合,如排序、查找、转换等。 7. **什么时候用assert**: - `assert` 用于断言,主要用于测试代码,断言某个条件为真,如果条件不成立,则抛出AssertionError。 8. **GC是什么?为什么要有GC?**: - GC (Garbage Collection) 是Java的自动内存管理机制,负责回收不再使用的对象所占用的内存,防止内存泄漏。有了GC,程序员无需手动管理内存,简化了编程。 9. **Strings=newString("xyz");创建了几个StringObject?** - 创建了一个String对象。字符串字面量"xyz"在常量池中存在,Strings引用指向了这个字符串。 10. **Math.round(11.5)等于多少?Math.round(-11.5)等于多少?** - Math.round(11.5) 等于 12,Math.round(-11.5) 等于 -11。round方法四舍五入,对浮点数向上取整。 11. **short s1=1; s1=s1+1;有什么错?short s1=1; s1+=1;有什么错?** - 第一句中,s1+1 的结果是int类型,需要显式转换为short类型,如 `(short)(s1+1)`。 - 第二句使用了自动装箱和拆箱,编译器会自动处理类型转换,所以没有错误。 12. **sleep()和wait()的区别**: - sleep() 是Thread类的方法,使当前线程暂停指定时间,释放CPU执行权,但不释放对象锁。 - wait() 是Object类的方法,使当前线程等待,释放对象锁,直到其他线程调用notify()或notifyAll()唤醒。 13. **Java有没有goto?** - Java语言中没有goto关键字,这遵循了结构化编程的原则,鼓励使用更清晰的控制结构,如if/else、switch、for/while等。 此外,面试还可能涉及其他Java基础知识,如多态、接口、异常处理、设计模式、并发编程、IO流、反射、JVM内存模型等。理解并掌握这些概念是成为优秀Java开发者的必备条件。
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