Java基础面试题

1. 请说明JVM内存模型,JVM内存分为哪几个区?如何处理内存泄漏问题
2. 简述JVM原理
	JVM是程序和操作系统之间的虚拟处理器,通过软件来实现计算机基于操作系统与硬件,能让java程序运行,JVM可以加载和执行编译器产生的.class文件,就可以让任意的程序看作成.class对象,.class对象通过JVM可以在任意的操作系统上运行。
3. 描述一下JVM加载class文件的原理机制?
	装载
			加载二进制文件(.class文件)
	链接
			验证--验证.class文件是否是从编译器产生的,防止安全问题
			解析--加载静态信息并赋予默认系统初始值
			准备--把符号引用(大部分是常量以及静态信息)转为直接引用
	初始化
			就是静态信息的直接赋值
4. Java中垃圾回收有什么目的?什么时候进行垃圾回收?
			减少无用对象占用内存,提高堆内存的使用率,不用程序员考虑内存回收的问题
			堆内存使用率超过了一定的限制(默认0.7可以改动),在CPU空闲的时候
5. 什么是字节码?采用字节码的最大好处是什么?什么是Java虚拟机?
		字节码---低配的语言,可以在JVM上进行运行,屏蔽底层系统的不同
		传输快、可以在不同的操作系统上进行运行
		JVM就是通过软件实现的虚拟计算机,可以在不同的操作系统上运行java程序,JVM把内存区域进行了抽象,像C、C++含有哪些设备,很多规范
6. Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
		从存储数据(物理)静态常量池(静态区)、运行时常量池
		从GC(逻辑)新生代(伊甸园去、幸存区(from、to))、老生代、永久代
		永久代:永久从存储的信息(class、元数据),这个区域不回收的,内存一直增加就会容易产生内存溢出,jdk1.8就干掉了这个区域
7. 什么是已检查异常?什么是未检查异常?吧编程时,catch异常后,应该怎么处理
		已检查异常:编译时异常---编译时出错,一定需要处理,抛出、捕获
		未检查异常:运行时异常---编译时期没错,运行时期出错,可以处理也可以不处理
		
		1. 打印日志    2. 包装成父类对象进行全局检测    3. 跳转错误页面
8. 数组和链表有什么区别,如何选择,如何实现栈和队列
		数组适合增删改
		链表适合读取数据
9. 如何读取一个大文件如4GB文件
		双向流---setSeek()---确定断电的位置    缓存
10. 用最有效率的方法算出2乘以17等于多少?
		2*17(16+1)  2*2左移4位或1
11. 10亿条短信,找出前一万条重复率高的
12. 请问你在什么情况下会在你的JAVA代码中使用可序列化?
		pojo类进行读写
		网络间的传输
13. 为什么放到HttpSession中的对象必须要是可序列化的
14. 举出一个例子,在这种情况你会更倾向于使用抽象类,而不是接口?
		抽象类---约束、规范、方法可重复,所有子类对于父类都需要共同的方法提供
15. 在Java中设计一个并发规则的pipeline?
16. 在Java中定义一个不做事且没有参数的构造方法的作用
		私有化的构造方法----(枚举 enum 枚举常量在其他位置可以使用)Math、Arraus、Collections、System(工具类 )
17. Java序列化的底层原理?
18. Java中的内存溢出是如何造成的?
19. import java和javax有什么区别
20. java中异常机制
21. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

22. 内部类可以引用他包含类的成员吗?有没有什么限制?
23. 为什么在重写了equals()方法之后也必须重写hashCode()方法?
24. sleep()和wait()有什么区别?
25. 请阐述一下你对JAVA多线程中“锁”的概念的理解。
26. 所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。

并举例明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?

27. 请简要讲一下你对测试驱动开发(TDD)的认识
28. 请阐述一下你对“面向接口编程”的理解。
29. 同步方法和同步块,哪个是更好的选择?
30. 多线程中的忙循环是什么?
31. 如果A和B对象循环引用,是否可以被GC?
32. 加密解密算法了解吗?
33. 如何解决高并发与高负载?
34. Integer内部缓存?
35. 线程池使用的注意事项?
36. 生产者和消费者模型的作用是什么?
37. 网络应用的模式及其特点
38. HTML Encode 和URL Encode的区别
39. Vector和ArrayList的区别,Hashtable和HashMap的区别。
40. TreeMap和TreeSet区别和实现原理。
41. java中的同步机制,synchronized关键字,锁(重入锁)机制,其他解决同步的方volatile关键字ThreadLocal类的实现原理
42. comparable接口和comparator接口实现比较的区别和用法,Arrays静态类如下实现排序的
43. TCP/UDP区别,TCP三次握手,SYN攻击
44. SHA,MD5
45. 一个文本文件,给你一个单词,判断单词是否出现。用linux实现
46. 两个线程如何同时监听一个端口。
47. 了解哪几种序列化协议?使用场景、如何去选择
48. Restful的好处
49. 事务并发访问的问题?
50. 简述设计模式6大原则
51. J2ee常见设计模式,总共23种
52. 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
53. 使用工厂模式最主要的好处是什么?在哪里使用?
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值