原先的内容有些多了,刚好换到新的一章,另开一篇。133页了,进展比较快,因为很多和C#一样,而且前面的都是一些概念、基本用法,所以可以快一些。
一、数据结构
1、Iterator:迭代器,像C#的IEnumerable接口一样,用于foreach遍历的
2、Bitset:C#好像没有对应的,只存取bool值,比较快
3、ArrayList:差不多
4、Stack:差不多
5、HashMap:在C#中常用Dictionary<xx,xx>,hashmap很少用,概念上差不多,这部份就先粗略看下,有空连同C#的一同研究下。
6、泛型:一样
二、Swing(相当于C#的WinForm)
1、空窗体(不知Java能不能拖控件,感觉WinForm拖控件开发还是很方便的
import javax.swing.*; public class SimpleFrame extends JFrame { private static final long serialVersionUID = 1L; public SimpleFrame() { super("Frame Title"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] arguments) { SimpleFrame sf = new SimpleFrame(); } }
2、看上去还可以,能和WinForm一样做个桌面应用程序出来,有按钮有复选框,但就是每个控件都要写代码,要能拖控件就会方便些。
暂时先跳过后面的吧,因为面试时不一定会用到这种应用程序,先把时间留给其它的吧
这一跳就是1/3啊。。。这本书1/3的篇幅是说应用程序的
三、Java编程
1、输入输出
流:Stream,差不多,read()、write()、close()
2、文件FileReader,FileWrite,差不多
3、File对象、Path对象,感觉上差不多,要实际中用一用才知道,暂时先这么看一看
4、序列化:通过ObjectOutputStream / ObjectInputStream类,暂态变量transient表示不被序列化
5、反射:java.lang.reflect包,和C#差不多,但具体语法有些区别。C#也不是很了解,只知道个大概,所以这部份也先粗略看下
四、联网通信
其实今天主要就是看C#中我会的,在Java有什么不同。如果C#中不会,那Java就更抓瞎了。。。
1、读取URL内容:C#有一套HttpRequest和HttpResponse,然后又是Stream之类的,项目中都封装好了,有时要用也是去网上找一下复制来用,或干脆用WebClient。Java这一套下来看着好像差不多,但具体语法完全不一样,要实点践一下才知道,但一般都有封装或写好的,这里也暂时不细看了,毕竟是为面试准备。
2、socket:项目中同事有写了一个socket,但我没实际用过,所以java这块也没法看了。
3、缓冲区:C#没用过,也只能跳过
4、字符集:一般最多的是UTF-8
五、JDBC连接数据库
1、连接SQLServer 2012
通过这篇,终于连接上了,感谢一下
public static void main(String[] args){ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433", "sa", "sa"); System.out.println("连接数据库成功"); } catch (SQLException e) { e.printStackTrace(); } }
2、读取数据库 executeQuery:相当于C#的ExecuteReader
public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433", "sa", "sa"); System.out.println("连接数据库成功"); Statement lookSee = conn.createStatement(); ResultSet result = lookSee.executeQuery("SELECT * FROM [GMSAccount].[dbo].[User]"); while (result.next()) { System.out.println(result.getString("LoginName")); } conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
3、更新数据库
public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433", "sa", "sa"); System.out.println("连接数据库成功"); PreparedStatement ps = conn.prepareStatement("UPDATE [GMSAccount].[dbo].[User] SET LoginName='22' WHERE LoginName=?"); ps.setString(1, "2"); ps.executeUpdate(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
应该是比较原始的写法了,就像以前看到C#的Ado.Net一样,不可能每个都这样来一大套,要么是封装好,要么是用Linq之类的
六、XML
书中主要使用XOM这个包来处理XML,也不知是否业界通用的,大概先知道这么回事,就没上机实践一下了。应该不是考查重点,就算问到,说下XOM的几个命令应该就差不多了。
用Element来新建,用appendChild()、removeChild()来增删
查找有:getRootElement()、getFirstChildElement()、getChildElements,配合foreach遍历
七、XML-RPC Web
整章跳过,平时用到WebService时,只要拼装好XML进行发送,接收XML格式解析就行,XML就当文本用就可以。其它的通讯没用过。
八、Android
虽然也很想现学现卖Android,但时间有限,还不如把其它基础弄好吧。毕竟这两年是Web的B/S方向,可能还偏服务端一些。移动端没接触过,想混也混不过去,Android干脆就明说没接触过拉倒吧。
九、附录:
NetBeans、开发环境、开发包等
NetBeans没用过,MyEclipse好不容易弄得稍微熟悉一些了,还是就认这个IDE吧,开发环境开发包什么的都弄的可以用了,就不再看书上怎么说了。
=========================================
总结:
没想到一天时间就把这本书囫囵吞枣的翻了一遍。
1、C#有,会用 / Java有:主要成就来自这部份,C#已经有所理解了,对比起来再理解Java就很快,感觉没什么障碍,面试时即使说不上来Java的,拿C#的套也没问题。
2、C#有,不会 / Java有:有一部份这种,明明两者都有,但C#掌握不深,最多在项目中用过皮毛,所以Java也没法看懂,还应该花些时间把C#的先弄透,再来看Java的异同。(如多线程、异步、socket、输入输出/序列化等)
3、C#没有 / Java有:这部份不多,一般Java有的,C#都会有,最多几个类/方法是Java独有的,但C#也有替代方案。Android是没辙了,虽然.NET有Mono,但不是现在钻研的时候。
4、C#有 / Java有,但区别大:比如桌面应用程序,两者都能实现C/S功能,但代码、界面完全是两码事,这个也不去研究了。
那这本书就先过吧,收获挺大的,好歹基本语法掌握了,IDE比较熟了,也会控制台输出这输出那了,弄个递归求什么数之类的笔试程序也可以了吧。。。
现在只是一个控制台,在项目中完全没用的。。。接下来要看下Java关于Web方向的(JSP?),目前公司这项目中前后端是分离的,前端是纯Html,通过ajax把数据提交到后端(C#的ashx),如果后端搭的是Java也是一样用,所以可以在这方面下些功夫,也比较实用。
还有Java各种框架,完全不了解,这也是一个大坑,不知面试前能不能基本了解一圈。
到公司,前台给了份相关岗位的题目,两页纸,知识点分布在多线程、JVM、设计模式、Spring、ORM、MySQL优化等。答题在前台左边的走廊,那算是一个小休息区,同时有另一个比我早到的哥们也在答题。答题的同时,有几个开发出来抽烟闲聊,清洁阿姨拖着吸尘器走来走去,吵的一点想法都没了。我大约用了30分钟答完,除去ORM、Spring、SQL优化略写,其余一一详答。答卷交回前台,被告知到右边的沙发等候。
约3分钟,面试官到达战场。因同一楼层所有会议室被占用。面试官只好带我到17层的上海芒果互娱科技有限公司去借用场地。谁知,到17层后,会议室满。无奈,只好在前台旁边的沙发进行。
先问了离职原因,因之前是.NET开发,此次应聘Java岗位,所以他询问作出选择的原因。之后开始问多线程和Java 1.5的并发库。接着,GC和JVM优化。然后,聊我提及的GitHub上几个项目和Maven。因我无实际上线服务器编写经验,且公司已有自主开发的服务器框架,没用Netty,他一再建议我转cocos2d-x或unity 3d,目前公司这两个岗位缺人,可考虑接收我。最后我坚持选择服务器端开发,他让我回去等二面通知,通知时间为一到两天。
找面试题时看到这个,这些我都答不上来啊。。。这位哥们也是.NET转Java的,不过水平比较高了
打算今晚先找一找Java面试题,巩固一下基础,明后天再看下服务端的。