Java基础知识
1. 看一下以下类的源代码
java.lang.String
java.lang.Enum
java.math.BigInteger
&java.math.BigDecimal
java.lang.ThreadLocal
java.lang.ClassLoader
&java.net.URLClassLoader
java.util.ArrayList
&java.util.LinkedList
java.util.HashMap
&java.util.LinkedHashMap
&java.util.TreeMap
java.util.HashSet
&java.util.LinkedHashSet
&java.util.TreeSet
2. 浏览一下以下类的接口及说明
java.io.*
java.lang.*
java.lang.management.*
java.lang.ref.*
java.lang.reflect.*
java.util.*
java.net.*
- Java实现对Array/List排序
java.uti.Arrays#sort
java.util.Collections#sort
- Java实现对List去重
- Java实现对List去重,并且需要保留数据原始的出现顺序
java.util.Collection#stream
- Java实现通过正则表达式提取一段文本中的电子邮件,并将
@
替换为#
输出
3. 学习使用常用的Java工具库
- commons.lang, commons.*, …
- guava-libraries
- netty
4. 什么是 API & SPI ?
- http://en.wikipedia.org/wiki/Application_programming_interface
- http://en.wikipedia.org/wiki/Service_provider_interface
5. 学习使用Java工具
jps
,jstack
,jmap
,jconsole
,jinfo
,jhat
,javap
,jcmd
, …- https://github.com/btraceio/btrace
- http://www.crashub.org/
- https://github.com/taobao/TProfiler
- https://github.com/CSUG/HouseMD
- http://wiki.cyclopsgroup.org/jmxterm
- https://github.com/jlusdy/TBJMap
6. 学习使用Java诊断/分析工具
7. 使用工具尝试解决以下问题,并写下总结
【 没有问题也要创造问题、解决问题 】
- 当一个Java程序响应很慢时如何查找问题?
- 当一个Java程序频繁 FullGC 时如何解决问题?
- 当一个Java应用发生
OutOfMemoryError
时该如何解决?
8. 学习各个Java版本的一些变化和特点
Java5
Java6
Java7
Java8
Java9
- …
相关资料
Java并发编程
1. Java内存模型是什么?
2. synchronized的作用是什么?
synchronized
关键词的用法,特别需要注意加在函数上(static
和 非static
)的区别,锁的原理及优化手段
3. volatile的作用是什么?
4. 判断代码是不是线程安全?
试着回答这些问题: 为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?
public class Sample {
private static int count = 0;
public static void increment() {
count++;
}
}
5. 学会使用java.uti.concurrent.**下面的类
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantReadWriteLock
java.util.concurrent.atomic.Atomic*
java.util.concurrent.ConcurrentHashMap
java.util.concurrent.Executors
- …
6. 分析并解释两段代码的差别
// 代码1
public class Sample {
private static int count = 0;
synchronized public static void increment() {
count++;
}
}
// 代码2
public class Sample {
private static AtomicInteger count = new AtomicInteger(0);
public static void increment() {
count.getAndIncrement();
}
}
相关资料
Java底层知识
1. 学习了解字节码、class文件格式
- http://en.wikipedia.org/wiki/Java_class_file
- http://en.wikipedia.org/wiki/Java_bytecode
- http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
2. 写一个程序要求实现javap的功能
要求:手工完成,不借助ASM等工具
如Java源代码:
public static void main(String[] args) {
int i = 0;
i += 1;
i *= 1;
System.out.println(i);
}
编译后读取class文件输出以下代码:
public static void main(java.lang.String[]);
Code:
Stack=2, Locals=2, Args_size=1
0: iconst_0
1: istore_1
2: iinc 1, 1
5: iload_1
6: iconst_1
7: imul
8: istore_1
9: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
12: iload_1
13: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
16: return
LineNumberTable:
line 4: 0
line 5: 2
line 6: 5
line 7: 9
line 8: 16
3. 使用CGLIB做一个AOP程序
4. 使用ASM实现AOP的功能
相关资料
网络编程知识
1. 用Java实现静态文件HTTP服务器
- 实现客户端缓存功能,支持返回304
- 实现可并发下载一个文件
- 使用线程池处理客户端请求
- 使用nio处理客户端请求
- 支持简单的rewrite规则
- 上述功能在实现的时候需要满足“开闭原则”
2. 了解 nginx 和 apache 服务器
了解相关特性并搭建对应的服务器
3. 用Java实现FTP、SMTP协议
4. 什么是CDN?如果实现?DNS起到什么作用?
- 搭建一个DNS服务器
- 搭建一个 Squid 或 Apache Traffic Server 服务器
相关资料
计算机安全知识
1. 什么是DES、3DES、AES、SM4?
2. 什么是RSA、DSA、ECC、SM2?
3. 什么是MD5、SHA1、SHA256、SM3?
4. 什么是PBKDF2, bcrypt, scrypt?
5. 什么是SSL、TLS,为什么HTTPS相对比较安全?
6. 什么是中间人攻击、如果避免中间人攻击?
7. 什么是DOS、DDOS、CC攻击?
8. 什么是CSRF攻击?
9. 什么是XSS攻击?
10. 什么是SQL(或命令行)注入攻击?
11. 什么是Hash碰撞拒绝服务攻击?
12. 了解并学习下面几种增强安全的技术
13. 用openssl签一个证书部署到apache或nginx
相关资料
JavaScript知识
1. 什么是prototype?
- 修改代码,使程序输出“1 3 5”:
2. 什么是闭包?
- 看一下这段代码,并解释一下为什么按Button1时没有alert出“This is button: 1”,如何修改:
3. 了解并学习一个JS框架
jQuery
ExtJS
Dojo
AngularJS
Vue
4. 用node.js或Deno写个程序
相关资料
编译原理知识
- 用Java实现以下表达式解析并返回结果(语法和Oracle中的
select sysdate-1 from dual
类似):sysdate sysdate - 1 sysdate - 1/24 sysdate - 1/(12*2)
- 实现对一个List通过DSL筛选
要求返回列表中匹配的对象,即最后两个对象;QList<Map<String, Object>> mapList = new QList<Map<String, Object>>; mapList.add({"name": "hatter test"}); mapList.add({"id": -1,"name": "hatter test"}); mapList.add({"id": 0, "name": "hatter test"}); mapList.add({"id": 1, "name": "test test"}); mapList.add({"id": 2, "name": "hatter test"}); mapList.add({"id": 3, "name": "test hatter"}); mapList.query("id is not null and id > 0 and name like '%hatter%'");
- 用Java实现以下程序(语法和变量作用域处理都和JavaScript类似):
代码:
输出:var a = 1; var b = 2; var c = function() { var a = 3; println(a); println(b); }; c(); println(a); println(b);
3 2 1 2
相关资料
数据库知识
- 关系型数据库
- MySQL
- 如何看执行计划?
- 如何搭建MySQL主备?
- binlog是什么?
- 了解MySQL Server和引擎的关系
- Derby, H2, PostgreSQL (任选一个)
- SQLite (主要用于手持设备等,用作嵌入式数据库)
- MySQL
- 图数据库
- neo4j
- 宽表数据库
- Cassandra
- HBase
- KV存储
- Memcached
- Redis
- LevelDB
相关资料
操作系统知识
- 学习使用一个开源的操作系统
- Linux
- CentOS
- Ubuntu
- *BSD
- FreeBSD
- NetBSD
- OpenBSD
- Linux
其他知识
- 学习使用git
- 学习使用构建工具
- 学习一个小语种语言
- Groovy
- Scala
- LISP, Common LISP, Schema, Clojure
- R, Julia
- Lua
- Ruby
- Rust
- …
- 尝试了解编码的本质
- 了解以下概念
ASCII
,ISO-8859-1
GB2312
,GBK
,GB18030
Unicode
,UTF-8
- 不使用
String.getBytes()
等其他工具类/函数完成下面功能public static void main(String[] args) throws IOException { String str = "Hello, 我们是中国人。"; byte[] utf8Bytes = toUTF8Bytes(str); FileOutputStream fos = new FileOutputStream("f.txt"); fos.write(utf8Bytes); fos.close(); } public static byte[] toUTF8Bytes(String str) { return null; // TODO }
- 想一下上面的程序能不能写一个转
GBK
的? - 写个程序自动判断一个文件是哪种编码
- 了解以下概念
- 尝试了解时间的本质
- 了解以下概念
System.currentTimeMillis()
返回的时间是什么
- 了解浮点数
0.1 + 0.1 + 0.1
等于多少?IEEE 754
相关资料
综合应用
- 参考node.js用Java实现一个 :)
相关资料
- 以上大部分相关资料
别人在学什么
推荐阅读
IBM Redbooks | http://www.redbooks.ibm.com/ |
---|---|
Effective Java 中文版 | http://book.douban.com/subject/1103015/ |
Java性能优化权威指南 | http://book.douban.com/subject/25828043/ |
深入Java虚拟机(原书第2版) | http://book.douban.com/subject/1138768/ |
深入理解Java虚拟机 | http://book.douban.com/subject/6522893/ |
HotSpot实战 | http://book.douban.com/subject/25847620/ |
七周七语言 | http://book.douban.com/subject/10555435/ |
编写可读代码的艺术 | http://book.douban.com/subject/10797189/ |
代码大全(第2版) | http://book.douban.com/subject/1477390/ |
重构 | http://book.douban.com/subject/1229923/ |
JavaScript权威指南 | http://book.douban.com/subject/10549733/ |
深度探索C++对象模型 | http://book.douban.com/subject/1091086/ |
大型网站技术架构 | http://book.douban.com/subject/25723064/ |
支撑处理器的技术 | http://book.douban.com/subject/20271450/ |
白帽子讲Web安全 | http://book.douban.com/subject/10546925/ |
高性能MySQL | http://book.douban.com/subject/23008813/ |
Web容量规划的艺术 | http://book.douban.com/subject/4200645/ |
相关链接
Research at Google | http://research.google.com/ |
---|---|
The Java Posse | http://www.javaposse.com/ |
Better Java | https://github.com/cxxr/better-java |
Hacking Articles | http://www.hackingarticles.in/ |
Joel on Software | http://www.joelonsoftware.com/ |
Free Download Top 100 Hacking Books | http://www.hackingarticles.in/free-download-top-100-hacking-books/ |