Java工程师面试基础篇(一)
我相信每一个程序员都是为了生活而努力着的。很多人因为兴趣踏上这条“烧脑”路;也有人因为梦想和执着;还有人被现实逼着,为自己、为家人谋这么一条坎坷的路。面试的目的不是让考官知道你怎么样,而是让你自己清楚你会什么、能够做什么。去面 Java 工程师,至少要会该职位的职能,而不是只会背题。
下面按基础篇整理:面向对象、集合、IO、Socket、关系型数据库。若你觉得会和书上差不多,可以先对照自己会不会动手写。

一、面向对象的三大特性
继承、封装、多态。
什么是继承?
-
继承是面向对象能提高软件开发效率的重要原因之一。 -
继承具有传递性,像孙子不仅像爸爸还像爷爷。 -
继承来的属性和方法是隐式的,在本类里看不见。 -
类只能单继承:一个类只能有一个父类。 -
一个接口可以有多个父接口,接口可以多继承。
实际项目中,A 继承 B,则 A 是 B 的子类。
什么是封装?
对象数据和操作该对象的指令都是对象自身的一部分,尽可能对外部隐藏数据。项目里封装用得最多的是实体类,常和 JavaBean 一起用:类必须具体且 public,并有无参构造器。实体类通常包含:私有成员变量、无参/有参构造器、setter/getter、重写 toString、重写 hashCode 和 equals。
什么是多态?
-
对象拥有多种形态:引用多态和方法多态。 -
引用多态:父类引用可指向本类对象,也可指向子类对象。 -
方法多态:创建本类对象时调本类方法;创建子类对象时调子类重写的方法或继承的方法。 -
必要条件:继承、重写。 -
作用是消除类型之间的耦合。
A 继承 B:A 不重写 B 的方法时,B b = new A() 输出仍是 B 方法里的信息;A 重写后,同样写法输出 A 方法里的信息。
二、Java 集合框架树

Collection 接口:集合框架的根接口之一,也是 List、Set 和 Queue 的父接口,定义增删改查。
Map 接口:提供映射关系,元素以键值对存储。重要实现类 HashMap。
-
键值对以 Entry 对象实例存在。 -
Key 不可重复,value 可以,即多对一。 -
可分别返回 Key 集合、value 集合、Entry 集合。 -
支持泛型;Key 和 value 都可以为 null。 -
HashMap 的 Entry 无序,和 List 相反。 -
有且只能有一个 Key 为 null 的映射(key 不能重复)。
List 接口:重要实现类 ArrayList。元素有序且可重复;可精确控制插入或删除位置。
Comparator:临时比较规则,实现类必须实现 compare()。 Comparable:默认比较规则,实例可比较大小、可自然排序,必须实现 compareTo()。
| 接口 | 特点 |
|---|---|
| Collection | List / Set / Queue 的根,定义增删改查 |
| List | 有序可重复,可按位置操作 |
| Map | Entry 键值对,Key 唯一 |
| Comparable / Comparator | 自然排序 vs 临时比较器 |
三、Java 中的 IO 流
字节流:用完一定要关闭。
字符流:
也可以这样写:
序列化和反序列化。这里的 file 指 String file = "文件在项目中的路径";:
四、Java 的 Socket 通信(多线程)

思路:
-
创建服务器端 Socket,指定并侦听某一端口,循环等待客户端连接。 -
创建客户端 Socket,指定服务器地址和端口,获取输出流向服务器发请求,关闭 socket 输出流。 -
服务端收到请求后,创建新线程并启动。 -
线程处理类获取输入流,读取客户端详情,关闭资源。 -
获取输出流响应客户端,客户端收到响应后关闭资源。
简单讲:我跟你说话(客户端→服务端),你收到后交给大脑思考(线程处理类),再回答我(线程处理类→客户端)。
五、关系型数据库
三范式:① 字段不可分。② 有主键,非主键字段依赖主键。③ 非主键字段不能互相依赖。
T-SQL:整个库里查询约占增删改查的 80%,查询离不开 T-SQL。

增:
-
插入单行: insert into <表名> (列名) values (列值) -
现有表数据加到已有表: insert into <已有的新表> (列名) select <源表列名> from <源表名> -
拿现有表数据建新表并填充: select <新建表列名> into <新建表名> from <源表名>
删:
-
删除满足条件的行: delete from <表名> where <删除条件> -
删除整个表数据: truncate table <表名>。删除所有行,但结构、列、约束、索引不会被删;不能用于有外键约束引用的表。
改:update <表名> set <列名=更新值> where <更新条件>
子查询:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 外层是外查询,括号内是子查询,必须出现在圆括号之间,还可以再嵌套。
转至:http://www.jianshu.com/p/e4ba72acffa9#
一句话总结:面试基础篇先把继承封装多态讲清楚,再顺着集合树、IO 开关流、Socket 一请求一线程、SQL 三范式和增删改查把动手能力摆出来。
转载请注明来源:Java工程师面试基础篇(一)








