首页 > 代码库 > 记录我遇到过的Java面试技术问题
记录我遇到过的Java面试技术问题
1. Java Memory model
execution engineer: java stack/pc registers/native|direct memory area/java heap/method area
volatile: thread = its own stack + memory cache inside CPU, volatile can make sure read/write directly to main memory data, not local cpu cache
2. Java GC
serial gc collector/parallel Scavenge/ConcurrentMS/G1
java heap:
new generation/old generation
new: eden+from/to survivor
xmn=xmx, survivorratio, newratio
Copy/Mark-Sweep/Mark-Sweep-Compact
parallel new
throughput first:
prallel old
response time first:
CMS
3. Inner Class and Static Inner Class
inner class contains a reference to its outer class, so it can access its outers‘ class member
Static inner class can only access static filed in its outer class, not require for outer class‘s instance to access static inner class
4. Java constructor
1 2 3 4 5 6 | 父类静态初始化块 子类静态初始化块 父类初始化块 父类构造函数 子类初始化块 子类构造函数 |
5. Collection (Wha‘ts the difference between List and Set)
java的集合是一种特别有用的工具类,大体上分为:Set、List和Map三种体系。其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合(键值对)。JDK 1.5以后,Java增加了Queue体系集合,代表一种队列集合实现。
6. JUnit (setup/teardown)如何写case,如何测试exception
@Test (expected = org.springframework.dao.InvalidDataAccessApiUsageException.class)
7. Mock
@Before public void setUp() { context = new Mockery(); /* need to consider security testing in service layer */ SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken("Admin", "password")); riskRankDAO = context.mock(IRiskRankDAO.class); context.checking(new Expectations() { { oneOf(riskRankDAO).findAll(); will(returnValue(list)); oneOf(riskRankDAO).save(riskRank); will(returnValue(riskRank)); } }); riskRankSaved = riskRankService.save(riskRank); context.assertIsSatisfied(); assertSame("riskRankSaved: " + riskRankSaved.toString() + " riskRank: " + riskRank.toString(), riskRank, riskRankSaved);
8. TDD/Scrum
9. java xml 读写
DOM, DOM4j, JDOM, SAX
10. Java HashMap implementation & Map interface
hashmap internal data storage: array + link (String/enum is also stored in array), key and its hashcode is used to get value‘s storage index
internal stroage data structure: entry: final key, value, Entry<key, value> next, final hashcode
method: put/get/contains/putall/delete etc
put: use hashcode to calculate hash value and index it to [0,array.length-1],if array[i] is empty, point array[i] to new added entry, increase map size; if array[i] is not empty, check whether key exists in link, if yes, modify entry with new value, if not, set array[i] to new added entry and set new added entry‘s next to previous entry, increase hashmap‘s size, if array‘s capacity exceeds its‘ capacity factor (initialized length * factor),resize length = 2 * length. resize在多线程没保护的时候,不止会导致put/get失败,还要小心死锁死循环
remove: need to modify pervious entry‘s next if elements is not the first one in the link
11. Java hashmap and treemap的区别
hashmap is faster than treemap(red-black tree), treemap contains order
12. linux 常用命令
file related: ls, du/df, cat, vi
user related: chown,chmod,useradd,groupadd
network related: tcpdump, ifcfg,route,netstat
others: top, find,rpm,tar,grep, etc
13. JMS实现,Queue, Topic的区别
producer: destination.send(Message) destination: queue
consumer MDB: onMessage queue
Queue: point to point (1对1)
Topic publish/subscribe (1对多)
http://baike.baidu.com/subview/157103/12665866.htm?fr=aladdin
http://blog.csdn.net/cloud_ll/article/details/18228049
14.Spring 好处
Inverse of control /dependency inject
15. Core Java有些什么库
network/io|nio|aio/concurrent/collection/security/jdbc etc
16. synchronized
java同步,在1.6之前比java concurrent lock慢很多,1.6之后慢20%,1.7还有优化
synchronized用来保证多线程的排他访问,结合wait/notify实现线程通信,synchronzied锁对象,lock是Cpu原子锁
17. SQL inner/outer join
交/并集
18. SQL 语句调优
分页,某些语句设计是否合理,join/like少用
http://www.cnblogs.com/wxj1020/archive/2008/04/27/1173638.html
19. how to debug java OOM
a. what kind of oom: stack? method area? direct memory area? heap area?
b. heap area: jmap or HeapDumpOnOutOfMemoryError | gui: visualvm + plugins
c. dump file analysis: eclipse memory analyzer, check which class consumes big memories, check which object contains the class
d. From code, check how the class objects are released, what‘s the problem
记录我遇到过的Java面试技术问题