文件压缩和解压
java.util.zip 包提供了对文件压缩和解压缩的处理类,它们继承自字节流 OutputStream 和 InputStream。 GZIPOutputStream 和 ZipOutputStream 可分别把数据压成 GZIP 和 Zip 格式;GZIPInputStream 和 ZipIn…
java.util.zip 包提供了对文件压缩和解压缩的处理类,它们继承自字节流 OutputStream 和 InputStream。 GZIPOutputStream 和 ZipOutputStream 可分别把数据压成 GZIP 和 Zip 格式;GZIPInputStream 和 ZipIn…
Java 从 JDK 1.5 才有枚举,和泛型一样是后来补上的特性。晚加的语法要向后兼容,编译器会帮源码做很多事(类型擦除、桥接方法、foreach、装箱拆箱),术语叫语法糖。枚举也走这条路:表面是 enum,底下是 java.lang.Enum 子类。 1.5 增加了抽象类 java.lang.E…
要理解 volatile 为什么能保证可见性,先看 Java 内存模型:变量在主内存,线程在工作内存里操作拷贝,线程之间不能直接读对方工作内存。 在此模型下会出现缓存一致性问题(两个线程对 i++ 最终得到 11 而不是 12)。并发编程要同时抓住原子性、可见性、有序性,再看 volatile 能做…
CAS(Compare and Swap)和 ConcurrentHashMap 经常绑在一起问:一个是硬件级的无锁更新,一个是并发 Map 怎么既线程安全又比整表锁更快。 JDK 5 之前同步几乎全靠 synchronized:竞争时上下文切换多、持锁会把别人挂起、还可能优先级倒置。volatil…
Java 工程师面试里,工具链常会被问到:JUnit 单元测试、SVN 版本管理、Maven 项目管理,以及日志管理 Log4j。下面按原文要点整理。 一、JUnit 单元测试 JUnit 是一套基于测试驱动开发的测试框架。 注:JUnit4 不需要继承 junit.framework.TestCa…
框架篇面试通常从 反射 / 注解 打底,再问 ORM、Hibernate、Struts2、Spring IOC/AOP、Spring MVC 和 MyBatis。下面按这个顺序把原图和配置示例留下来,方便对着图回忆调用链。 一、框架基础:反射与注解 Java 本身不是动态语言,要「运行时才决定用哪个…
Java Web 面试常把 JSP / Servlet / Session / 过滤器 / 监听器 串成一条线:浏览器请求怎么落到页面、九大内置对象各自管什么、转发和重定向差在哪。下面按这条线把图和要点摊开,JavaScript 总复习可另看 这篇总结。 这组笔记对应面试「Web 篇」:先看全景图,…
我相信每一个程序员都是为了生活而努力着的。很多人因为兴趣踏上这条“烧脑”路;也有人因为梦想和执着;还有人被现实逼着,为自己、为家人谋这么一条坎坷的路。面试的目的不是让考官知道你怎么样,而是让你自己清楚你会什么、能够做什么。去面 Java 工程师,至少要会该职位的职能,而不是只会背题。 下面按基础篇整…
Git 是免费、开源的分布式版本控制系统,用来敏捷高效地处理或小或大的项目。它最初服务于 Linux 内核开发:不需要服务器端软件也能做版本控制,源码发布和交流很方便,速度也快,合并追踪(merge tracing)能力尤其出色。 和 CVS、Subversion 这类集中式工具不同,Git 采用分…
Log4j 是 Apache 的开源日志项目。用它可以把日志打到控制台、文件等目的地,控制每条日志的格式,并通过级别更细地控制生成过程。这些都可以写在配置文件里,不必改应用代码。 通过其它语言接口,C、C++、.Net、PL/SQL 也能用 Log4j,语法和 Java 里一样,方便多语言分布式系统…