上篇 面试笔试经验技巧篇 2
第1章 面试官箴言 2
1.1 有道无术,术可求;有术无道,止于术 2
1.2 求精不求全 3
1.3 脚踏实地,培养多种技能 5
1.4 保持空杯心态 6
1.5 职场是能者的舞台 7
1.6 学会“纸上谈兵” 8
1.7 小结 8
第2章 面试心得交流 9
2.1 心态决定一切 9
2.2 假话全不说,真话不全说 11
2.3 走自己的路,让别人去说吧 12
2.4 夯实基础谋出路 14
2.5 书中自有编程法 15
2.6 笔试成绩好,不会被鄙视 17
2.7 不要一厢情愿做公司的“备胎” 18
2.8 小结 19
第3章 企业面试笔试攻略 20
3.1 互联网企业 20
3.2 网络设备提供商 25
3.3 外企 31
3.4 国企 34
3.5 研究所 38
3.6 创业型企业 40
3.7 如何抉择 44
下篇 面试笔试技术攻克篇 46
第4章 Java基础知识 46
4.1 基本概念 46
4.1.1 Java语言有哪些优点 46
4.1.2 Java与C/C+++有什么异同 47
4.1.3 为什么需要public static void main (String[]args)这个方法 48
4.1.4 如何实现在main()方法执行前输出“Hello World” 49
4.1.5 Java程序初始化的顺序是怎样的 50
4.1.6 Java中的作用域有哪些 51
4.1.7 一个Java文件中是否可以定义多个类 52
4.1.8 什么是构造函数 53
4.1.9 为什么Java中有些接口没有任何方法 54
4.1.10 Java中的clone方法有什么作用 56
4.1.11 什么是反射机制 60
4.1.12 package有什么作用 61
4.1.13 如何实现类似于C语言中函数指针的功能 62
4.2 面向对象技术 64
4.2.1 面向对象与面向过程有什么区别 64
4.2.2 面向对象有哪些特征 65
4.2.3 面向对象的开发方式有什么优点 65
4.2.4 什么是继承 66
4.2.5 组合和继承有什么区别 66
4.2.6 多态的实现机制是什么 67
4.2.7 重载和覆盖有什么区别 69
4.2.8 抽象类(abstract class)与接口( interface)有什么异同 70
4.2.9 内部类有哪些 71
4.2.10 如何获取父类的类名 73
4.2.11 this与super有什么区别 74
4.3 关键字 76
4.3.1 变量命名有哪些规则 76
4.3.2 break、 continue以及return有什么区别 76
4.3.3 final、 finally和finalize有什么区别 77
4.3.4 assert有什么作用 79
4.3.5 static关键字有哪些作用 80
4.3.6 使用switch时有哪些注意事项 83
4.3.7 volatile有什么作用 85
4.3.8 instanceof有什么作用 86
4.3.9 strictfp有什么作用 86
4.4 基本类型与运算 87
4.4.1 Java提供了哪些基本数据类型 87
4.4.2 什么是不可变类 89
4.4.3 值传递与引用传递有哪些区别 91
4.4.4 不同数据类型的转换有哪些规则 94
4.4.5 强制类型转换的注意事项有哪些 95
4.4.6 运算符优先级是什么? 95
4.4.7 Math类中round、 ceil和floor方法的功能各是什么 96
4.4.8 ++i与i++有什么区别 97
4.4.9 如何实现无符号数的右移操作 98
4.4.10 char型变量中是否可以存储一个中文汉字 100
4.5 字符串与数组 102
4.5.1 字符串创建与存储的机制是什么 102
4.5.2 “==”、equals和hashCode有什么区别 103
4.5.3 String、 StringBuffer、 StringBuilder和StringTokenizer有什么区别 105
4.5.4 Java中数组是不是对象 107
4.5.5 数组的初始化方式有哪几种 107
4.5.6 length属性与length()方法有什么区别 109
4.6 异常处理 110
4.6.1 finally块中的代码什么时候被执行 110
4.6.2 异常处理的原理是什么 113
4.6.3 运行时异常和普通异常有什么区别 114
4.7 输入输出流 116
4.7.1 Java IO流的实现机制是什么 116
4.7.2 管理文件和目录的类是什么 118
4.7.3 Java Socket是什么 119
4.7.4 Java NIO是什么 120
4.7.5 什么是Java序列化 121
4.7.6 system.out.println()方法使用需要注意哪些问题 124
4.8 Java平台与内存管理 125
4.8.1 为什么说Java是平台独立性语言 125
4.8.2 Java平台与其他语言平台有哪些区别 126
4.8.3 JVM加载class文件的原理机制是什么 126
4.8.4 什么是GC 127
4.8.5 Java是否存在内存泄露问题 130
4.8.6 Java中的堆和栈有什么区别 131
4.9 容器 133
4.9.1 Java Collections框架是什么 133
4.9.2 什么是迭代器 134
4.9.3 ArrayList、 Vector和LinkedList有什么区别 135
4.9.4 HashMap、 HashTable、 TreeMap和WeakHashMap有哪些区别 136
4.9.5 用自定义作为HashMap或HashTable的key需要注意哪些问题 137
4.9.6 Collection和Collections有什么区别 142
4.10 多线程 142
4.10.1 什么是线程?它与进程有什么区别?为什么要使用多线程 142
4.10.2 同步和异步有什么区别 143
4.10.3 如何实现Java多线程 144
4.10.4 run()方法与start()方法有什么区别 146
4.10.5 多线程同步的实现方法有哪些 148
4.10.6 sleep()方法与wait()方法有什么区别 149
4.10.7 终止线程的方法有哪些 150
4.10.8 synchronized与Lock有什么异同 152
4.10.9 什么是守护线程 156
4.10.10 join()方法的作用是什么 157
4.11 Java数据库操作 158
4.11.1 如何通过JDBC访问数据库 158
4.11.2 JDBC处理事务采用什么方法 160
4.11.3 Class.forName的作用是什么 161
4.11.4 Statement、 PreparedStatement和CallableStatement有什么区别 161
4.11.5 getString()方法与getObject()方法有什么区别 163
4.11.6 使用JDBC时需要注意哪些问题 164
4.11.7 什么是JDO 164
4.11.8 JDBC与Hibernate有什么区别 164
第5章 Java Web 165
5.1 Servlet与JSP 165
5.1.1 页面请求的工作流程是怎样的 165
5.1.2 HTTP中GET与POST方法有什么区别 166
5.1.3 什么是Servlet 166
5.1.4 doPost()方法与doGet()方法怎么选择 168
5.1.5 什么是Servlet的生命周期 168
5.1.6 JSP有哪些优点 169
5.1.7 JSP与Servlet有何异同 169
5.1.8 如何使用JSP与Servlet实现MVC模型 170
5.1.9 Servlet中forward和redirect有什么区别 172
5.1.10 JSP的内置对象有哪些 173
5.1.11 request对象主要有哪些方法 174
5.1.12 JSP有哪些动作 175
5.1.13 JSP中include指令和include动作有什么区别 176
5.1.14 会话跟踪技术有哪些 176
5.1.15 Web开发中如何指定字符串的编码 177
5.1.16 什么是Ajax 178
5.1.17 cookie和session有什么区别 178
5.2 J2EE与EJB 179
5.2.1 什么是J2EE 179
5.2.2 J2EE中常用的术语有哪些 179
5.2.3 EJB有哪些不同的类别 181
5.2.4 EJB与JavaBean有什么异同 182
5.2.5 EJB有哪些生命周期 182
5.2.6 EJB的角色有哪几种 184
5.2.7 EJB的开发流程是怎样的 185
5.2.8 EJB 3.0与EJB 2.0有哪些不同之处 187
5.2.9 EJB容器有哪些作用 187
5.2.10 EJB规范规定EJB中禁止的操作有哪些 187
5.2.11 Web服务器与Web应用服务器有什么区别 188
5.2.12 什么是Web Service 188
5.2.13 SOAP与REST有什么区别 189
5.2.14 什么是XML 190
5.2.15 数据库连接池的工作机制是怎样的 193
5.2.16 J2EE开发有哪些调优的方法 193
5.3 框架 194
5.3.1 什么是Struts框架 194
5.3.2 Struts框架响应客户请求的工作流程是什么 196
5.3.3 Struts框架的数据验证可分为几种类型 197
5.3.4 Form Bean的表单验证流程是什么 197
5.3.5 在Struts配置文件中,〈 action〉元素包含哪些属性和子元素 197
5.3.6 ActionForm Bean的作用有哪些 198
5.3.7 ActionForm的执行步骤有哪些 198
5.3.8 forward与global-forward有什么区别 198
5.3.9 Struts如何实现国际化 199
5.3.10 Struts 1与Struts 2有哪些区别 199
5.3.11 什么是IoC 201
5.3.12 什么是AOP 203
5.3.13 什么是Spring框架 205
5.3.14 什么是Hibernate 206
5.3.15 什么是Hibernate的二级缓存 211
5.3.16 Hibernate中session的update()和saveOrUpdate ()、load()和get()有什么区别 212
5.3.17 Hibernate有哪些主键生成策略 213
5.3.18 如何实现分页机制 214
5.3.19 什么是SSH 214
第6章 数据库原理 216
6.1 SQL语言的功能有哪些 216
6.2 内连接与外连接有什么区别 218
6.3 什么是事务 219
6.4 什么是存储过程?它与函数有什么区别与联系 220
6.5 各种范式有什么区别 221
6.6 什么是触发器 222
6.7 什么是游标 223
6.8 如果数据库日志满了,会出现什么情况 224
6.9 union和union all有什么区别 224
6.10 什么是视图 225
第7章 设计模式 226
7.1 什么是单例模式 226
7.2 什么是工厂模式 227
7.3 什么是适配器模式 229
7.4 什么是观察者模式 229
第8章 数据结构与算法 231
8.1 链表 231
8.1.1 如何实现单链表的增删操作 231
8.1.2 如何从链表中删除重复数据 234
8.1.3 如何找出单链表中的倒数第k个元素 235
8.1.4 如何实现链表的反转 236
8.1.5 如何从尾到头输出单链表 237
8.1.6 如何寻找单链表的中间结点 237
8.1.7 如何检测一个链表是否有环 238
8.1.8 如何在不知道头指针的情况下删除指定结点 239
8.1.9 如何判断两个链表是否相交 239
8.2 栈与队列 241
8.2.1 栈与队列有哪些区别 241
8.2.2 如何实现栈 241
8.2.3 如何用O(1)的时间复杂度求栈中最小元素 243
8.2.4 如何实现队列 244
8.2.5 如何用两个栈模拟队列操作 246
8.3 排序 247
8.3.1 如何进行选择排序 247
8.3.2 如何进行插入排序 248
8.3.3 如何进行冒泡排序 249
8.3.4 如何进行归并排序 250
8.3.5 如何进行快速排序 252
8.3.6 如何进行希尔排序 254
8.3.7 如何进行堆排序 255
8.3.8 各种排序算法有什么优劣 257
8.4 位运算 257
8.4.1 如何用移位操作实现乘法运算 257
8.4.2 如何判断一个数是否为2的n次方 258
8.4.3 如何求二进制数中1的个数 259
8.5 数组 260
8.5.1 如何寻找数组中的最小值与最大值 260
8.5.2 如何找出数组中第二大的数 261
8.5.3 如何求最大子数组之和 262
8.5.4 如何找出数组中重复元素最多的数 266
8.5.5 如何求数组中两两相加等于20的组合种数 267
8.5.6 如何把一个数组循环右移k位 268
8.5.7 如何找出数组中第k个最小的数 269
8.5.8 如何找出数组中只出现一次的数字 270
8.5.9 如何找出数组中唯一的重复元素 272
8.5.10 如何用递归方法求一个整数数组的最大元素 276
8.5.11 如何求数对之差的最大值 276
8.5.12 如何求绝对值最小的数 280
8.5.13 如何求数组中两个元素的最小距离 282
8.5.14 如何求指定数字在数组中第一次出现的位置 283
8.5.15 如何对数组的两个子有序段进行合并 284
8.5.16 如何计算两个有序整型数组的交集 285
8.5.17 如何判断一个数组中数值是否连续相邻 287
8.5.18 如何求解数组中反序对的个数 288
8.5.19 如何求解最小三元组距离 289
8.6 字符串 292
8.6.1 如何实现字符串的反转 292
8.6.2 如何判断两个字符串是否由相同的字符组成 293
8.6.3 如何删除字符串中重复的字符 295
8.6.4 如何统计一行字符中有多少个单词 297
8.6.5 如何按要求打印数组的排列情况 298
8.6.6 如何输出字符串的所有组合 300
8.7 二叉树 301
8.7.1 二叉树基本概念 301
8.7.2 如何实现二叉排序树 303
8.7.3 如何层序遍历二叉树 305
8.7.4 已知先序遍历和中序遍历,如何求后序遍历 306
8.7.5 如何求二叉树中结点的最大距离 308
8.8 其他 309
8.8.1 如何消除嵌套的括号 309
8.8.2 如何不使用比较运算就可以求出两个数的最大值与最小值 311
第9章 海量数据处理 312
9.1 问题分析 312
9.2 基本方法 312
9.3 经典实例分析 325
9.3.1 top K问题 325
9.3.2 重复问题 328
9.3.3 排序问题 330
附录 331
附录A软件企业Java笔试真题1. 331
附录B软件企业Java笔试真题2. 336
附录C软件企业Java笔试真题3. 339
附录D求职有用网站及QQ群一览表 342