※ 引述《lueichun (no anonymous)》之铭言:
: ※ 引述《qrtt1 (有些事,有时候。。。)》之铭言:
: : 单纯概念练题的话,
: : 用候捷早年放在网络上的 thinking in java 2/e 的 pdf
: : 看完该章本文然后做它的习惯就行了。
: : 章节集中在 6, 7, 8 章。
: : 不过,不赶时间的话,还是有 4, 5 开始做吧。
: : 目录:
: : https://i.imgur.com/xf50Cv8.png
: : https://i.imgur.com/QwY0EYw.png
: 我也想问类似的问题 结果被抢先了 所以我就借这标题问一下
: 就是我目前从事java开发的工作已经两年了
: 基本的语法大概都有印象 但是要具体描述自己到底哪里会 不会还是不太行
: 刚好我找到TonyQ大以前的文 提到做个检查表来检视:
: 知道J2EE、J2SE、J2ME这三个领域的对象的差异
: 知道if-else、switch是什么
: if-else常用 但switch几乎不会用到 不熟
: 知道for、while是什么
: 都会用
其实大部分的问题在第 1 年后,应该不再是问题。
它们会被内化为反射动作,或是解决问题的直觉。
像基本语法的问题就不太该再问了,并且要随的新时代习得 lambda 语法
还有新的 api 例如,java 8 新 date/time api
: 知道 API Document的使用方法
: 需要的时候会查
: 知道String有哪些函式、怎么切割字串跟组合字串。
: 切割用split 组合用concat
: 知道main的用途与main的参数用法
: main是jvm首先执行的方法 main的参数没用过
api document 要查其实不是那么方便,
因为随着公司内专案建立的年代不同 library 冻结的版本不同
上网随意要 google 到对的版本的 api 不那么容易
一个正常稍有规模的专案不会只有用 standard library 的部分
像是常见的 spring framework 或 hibernate 就有许多版本
配合流行很久的 ant ivy 或 maven 或 gradle 作相依管理工具
应该有机会直接透过 IDE 追入函式看到它的 source code 的,
当然 api doc 的 annoation 也在里面,IDE 会自然地带出 api document
不过一旦你对基本语法没有疑问,也渐渐能掌握 OOP 概念
与 Design Pattern 等等的想法,
你可能会觉得看 source code 是一件更加明确的事,
并且开始觉得看别人的 source code 其实并不可怕
比起对于‘一时忘了改’就会过期的文件来说,source code 才是真理!
: 知道static method怎么设计
: 不会 只有用过math.random() integer.parseInt()这类方法
: 知道class跟instance method怎么设计
: 工作上还没设计过 只有自己练习coding设计简单的
当一个东西你需要随着 class level 初始化时也需要用的 static 啊。
像 Jdbc Driver 就是典型的例子
: 知道Classpath是什么,能引用第三方的套件。(通常是jar档)
: classpath就是java档被编译后形成的class档 所在的路径
: 在eclipse新增dynamic web project时 会询问你class档要放哪
: 套件的话 ojdbc spring hibernate struts 1 都用过
: 但都只会基本功能
‘现代化’一点的开发方式不会再自己加 jar 档了,
除非是有特别的需求,或维护 legacy project 才会这么做的。
这反而是该改成用相依性管理工具。
: 知道什么是IDE,并了解IDE提供开发流程中哪些协助,扮演什么角色。
: 这个不太会讲
比起会讲这个,更希望你专注在优化你运用‘开发工具’开发的流程
有些人明明有了 IDE 但却没用到 IDE 的优点,
仅作为一种华丽的编辑器程式使用着它,这样实在太浪费了。
热键记熟了,有没有调到最适合自己的状态?
共通的 coding style 的 formatter / editor config (line width) /
code template / import orders / favorite static import 都设好了吗?
辅助你提升升产力的 plugin 或元件装了吗?
: 2.资料结构基础
: 知道什么是Array
: 只知道中文叫阵列 长度是固定的...
: 知道什么是List (ArrayList、LinkedList)
除了复杂度,重点在结构的特性,这影响到你的应用场景。
如果你总是需要在 index 0 做 insert/delete
或在中间 insert/delete,与你只需要简单 append 的情况
会有不同的选择。
: 只会用get set size 知道arrayList默认长度是10
: arrayList会随着元素数量动态增减长度 其他的不会解释...
: 知道什么是Map (HashMap、TreeMap的不同点?)
: 一样只会用基本的方法
: 知道如何浏览Map及其他Collection的浏览法(iterator())
: 只会forEach 另外知道forEach是语法蜜糖
: 编译器会把forEach转成iterator()的格式
在这新的时代,你更该关注 stream api 啊 :P
: 3.算法基础
: 知道什么是算法
: 讲不出来Orz
:
: 有时间复杂度的概念
: 有空间复杂度的概念
: 知道什么叫递回 (实务上偶尔会有机会用到)
: 太久没用都忘光光QQ
看得我都要‘回’‘光’返照了 orz..
:
: 对基本的算法有一定了解
: 基本排序法(buble、selection、insertion、quick、merge)
: 动态规划(Dynamic Programming)
: 以上都忘光光...
算法的种类不少,若能对复杂度有概念是挺好的。
实际哪类都可能应用到,若不是为了要面试,而是要实作应用的东西。
那就不用太钻基础元件设计的算法,
特别是别人都已经整包写好的排序什么的。
: 4.Java进阶应用
: 能用java.text.* 做日期的格式化、数字的格式化
: 能用java.io.* 做文字档的读档、存盘 (java.util.Scanner也行)
: 能用 java.lang.Math 做一些数学运算
: 这些都是要用到时才会去GOOGLE
由 console 输入文字这东西太少用了,
直接手写读档其实也没想像中的多,即使有,也用用.
Apache Commons IO 系列,并记得现代的写法可以
try-resource
: 知道什么是Jar档,并了解class是能够被反编译(de-compile)的。
: 一种java档的压缩档 若要在专案引入框架或其他工具
: 常常需要引入jar档 class是可以被反编译 但我几乎没做过o.o
当然是装 IDE plugin 做啊。
: 知道什么是 JDBC ,能对数据库操作有基本了解。
: 一种让程式跟数据库得以连接起来的接口
: 各家数据库厂商实作了这个接口 并打包成jar档 只要再专案引入jar档
: 即可将专案连接到数据库
JDBC 的部分
1. 它的 index 是由 1 起算的,这无敌重要。
2. 记得要有正确使用 connection pool
validation string / validation interval / ...
只有单一 connection 是难以逼出效能的,
并且断线重连的处理也不好做。
3. 使用 transaction 前,请确定 db 有支援,不然就没戏了
4. 如果是新专案,请开始以 UTC+0 作为数据库时区,
之后要上云比较方便
(旧专案就继续 work around 吧)
: 能熟悉使用IDE,减少多余开发时间在制造错误跟重复的行为上。
: 有时候同事会说我对工具不熟悉 甚至全选 复制的动作可以用鼠标
: 点两下全选再复制 而非用鼠标拖曳再复制都是同事教的
: 能了解在Object这个基底类别中,toString、equals、hashcode
: 这三个method扮演什么样的角色。
: toString用来转型成字串 equals用来比较物件的值 其他的不会= =
要知道这些东西都能用 IDE 产生,
或透过 Annotation Processing Tool 产生。
: 1.Java高阶应用
:
: 会利用 java.net.* 处理网络上的沟通
: (ex. Socket、ServerSocket,也可以用URL抓抓网页之类)
: 会利用 javax.swing.* 、 java.awt.* (或者SWT)做GUI的处理
: 没做过
写 Web 就写 Spring Boot
实作网络底层就靠 Netty,如果要实作 RPC 那就要考虑学一下 gRPC 了
GUI .... 完全忽略吧,除非那是你的真爱。
: 了解什么是接口,并能利用接口撰写程式。
: 没有设计过接口 只有拿既有的程式来改
: 了解什么是 Design Pattern,并且能举出java api中
: 使用Pattern的实例。
interface 只是个语法,它具体意义是‘事先约定’好的事项
若都实作好,那依约定可以有可预期的行为。
像是 JDBC 在 standard libary 内,其实只有 interface 而已。
不同的 jdbc driver 有着不同的实现。
: 我只知道java io用到装饰者模式
: 能以J2SE基础切入J2EE的 JSP 网页应用程式。(有兴趣可再深入J2EE
: )
JSP ...(不想谈他)
现在多为只出 restful api,前端另外搞不管是 reactjs 或 angularjs
直接写 jsp 页面转来转去的渐渐减少了,前后端分离,前端也能独立做测试
: JSP会基本的语法 知道如何将后端传过来的值写在JSP档上
至少要会搞定 servlet container 的 encoding
还有知道 get, post 的不同啊
: 能以J2SE基础编写J2ME的应用程式(MIDP)
: 不会
现在是 Android 的天下了,不用提这个历史遗迹啊@@
: 有能力依需求编写一个以上的Thread,并考虑到Thread-safe的问题。
: 工作上没遇过多执行绪的状况 都忘了QQ
你有在写 web 一定有多执行绪,只是你是参与其中,并非制造新的 thread。
若是直接实作 servlet 那么就有机会遭遇 thread safe 的问题。
或接续先前的 date format,要知道 SimpleDateFormat 这类东西
并不是 thread safe 的,所以你若要写个公用函式来给 servlet/jsp
呼叫,记得每次都要 new 一个新的,才不会有 race condition 发生
: 2.工具部份
: 能了解 Framework 是什么,并了解目前能见到的Framework的目标。
: 只有碰过Spring hibernate struts基本用法 不敢说会
: 也不敢说了解框架是什么
你得了现一下新的趋势,这检查表旧了,你得找替代的问题放上去。
: 能了解 Ant 这个建立开发的自动化流程的工具
: 没用过
ant, maven, gradle 常用的都要摸一下啊
: