在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量,初始化Java代码和静态Java代码块
34.举例说明一个典型的垃圾回收算法
1) 引用计数:
要求堆中的每个对象实例都有一个称为引用计数的字段,当分配时计数+1、超出或销毁时-1,当引用计数为0时其空间可回收。
引用计数优点:回收速度快;
缺点:引起运行时系统性能下降。
2) 标记并清除:
要求每个对象都包含一个位字段,称为标记位,或在算法运行时建立一个外部数组以存放标记位。该算法从遍历堆中所有已分配的内存块开始,重新设置块的标记位,检查所有指向堆中对象的字段和变量,将被引用对象的标记位设置为真,然后找出所有未标记对象,将其放到自由块列表中来回收空间。
标记并清除优点:存储开销较低且不会影响运行时的执行性能;
缺点:当内存垃圾收集器运行时可能会占用很长时间。
35.请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来
36.写一个java程序实现线程连接池功能
流程如下:先启动若干个线程,并让这些线程处于睡眠状态,当有客户请求时,就会唤醒池中的一个睡眠线程,来处理用户请求。处理完成以后,线程又处于睡眠状态。
37.数据库连接池原理
数据库连接是关键的有限的昂贵的资源,每个数据库连接对象都对应一个物理数据库连接,每次打开一个物理连接使用后都得关闭这个连接,这就造成了性能底下
解决方案:在应用程序启动时,建立足够多的数据库连接,并将这些连接组成一个连接池,由应用程序对池中的连接动态的申请、分配、释放。
对于多于池中连接数的并发请求、应该在请求队列中排队等待,并且应用程序可以根据池中连接的使用率,动态地增加或者减少池中的连接数
(最大连接数、最小连接数)
38.给定一个C语言函数,要求实现在java类中进行调用
39.编一段代码,实现在控制台输入一组数字后,排序后在控制台输出
40.列出某文件夹下的所有文件
41.调用系统命令实现删除文件的操作
42.实现从文件中一次读出一个字符的操作
43.列出一些控制流程的方法
44.多线程有哪些状态
45.编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示,直到输入"END"为止,让你写出客户端的程序
46.作用域public,private,protected,以及不写时的区别
47.ArrayList和Vector的区别,HashMap和Hashtable的区别
48.char型变量中能不能存贮一个中文汉字?为什么?
49.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
50.垃圾回收机制,如何优化程序
51.float型float f=3.4是否正确
52.介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
53.Java中异常处理机制,事件机制
54.JAVA中的多态与继承
55.现在输入n个数字,以逗号,选择升序、降序排列。
56.Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
57.在COLLECTION框架中,实现比较要实现什么样的接口
58.JAVA多线程编程。 用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。
59.STRING与STRINGBUFFER的区别
60.hashmap的内部实现机制,hash是怎样实现的,什么时候rehash
62.java的内存管理
63.分布式缓存的内存管理,如何管理和释放不断膨胀的session,memcache是否熟悉
64.oralce的底层管理(怎样让查询快,插入慢)
65.java底层是怎样对文件操作的
66.研究了哪些框架的源码
67.并发问题,锁,怎么处理死锁,脏数据处理
68.性能问题
69.equals和hashcode这些方法怎么使用的
70.java的NIO