首页
学习
活动
专区
工具
TVP
发布

海纳周报

专栏作者
15
文章
12293
阅读量
29
订阅数
如何学习Java
不要被什么科班出身之类的说法吓坏了。虽然我是科班出身,但我始终觉得,只要你肯努力,这里面并没有什么无法逾越的鸿沟,最重要的是不要好高骛远,也不要急于求成。学习和积累是有一个过程的,在程序员这个行当,你一分付出,就会有一分回报。尊重学习的内在规律,循序渐进,终有一天,你会成为你想成为的那个人的。 接着,我来谈谈具体的规划。 1. 了解Java的运行环境。搞清楚path和classpath是干什么的,怎么在命令行进行编译,执行。知道IDE的各个按钮后面真正发生了什么事情。 2. 掌握Java的语法。搞清楚包,接
海纳
2018-03-02
7200
修饰者模式
java.io 这个包里有一个类,比较特别,这就是BufferedReader。我们从JDK的源码里,找到它的实现: public class BufferedReader extends Reader { public BufferedReader(Reader in, int sz) { super(in); if (sz <= 0) throw new IllegalArgumentException("Buffer size <= 0"
海纳
2018-03-02
6920
【第二期】一次学透java.io
java.io是新手学习Java的第一个难点。因为这个package中的东西比较多,也比较复杂,另外加上一些接口太过于面向对象了,更加增大了学习的难度。这一期,我针对这个问题专门探讨一下,通过三篇文章,大家就可以完全地掌握java.io这个包了。 理解流 要掌握java.io,必须要掌握的一个概念就是输入输出流。 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后
海纳
2018-03-02
7290
Java线程模型
大家新年好。2018年的第一期来得晚了一些。因为年底有很多工作要做,加班多了一些,公众号停更了两周。 今天借着知乎上一个关于线程模型的问题,我正好可以讲一下Java的线程模型。 先来一段视频,带大家浏览一下JDK的源代码: 在早期的linux系统里,是没有线程支持的,操作系统分配资源的单位是进程,然后执行单元也是进程。说详细点就是,每个进程有自己的内存,文件描述符,IO端口等,你不能随便访问其他进程的资源,分配给你,就是你的了,别人看不到。而那时候的进程都是单线程的,所有的进程在同一个CPU上分时执行。 后
海纳
2018-03-02
1.2K0
多线程内幕
本文是HinusWeekly第三期的第二篇文章,第三期的主题就是多线程编程。本文试图从单核CPU的角度讨论并发编程的困难。 函数调用的过程,就是不断地创建栈帧,销毁栈帧。实际上,多线程程序的执行只是这个模型的一种推广,也就是每一个线程都拥有自己独立的栈空间。 我们看一下这个程序: public class TestOne { public static void main(String[] args) throws Exception { Thread t1 = new Thread
海纳
2018-03-02
6160
synchronized关键字的语义
上一篇文章,我们讲到,如果发生了多个线程共同访问一个全局变量的时候,就会发生各种意料之外的情况。其实现实生活中有很多这样的例子。我举一个例子。 一群人都要过河,但是河面上只有一只独木舟,除了船夫,一次只能带一个人。所有到达河边的人都想往船上抢,难免把船搞翻了。为了解决这个问题,我们可以在河边上设一个售票处,谁先抢到票,谁就可以上船,没有抢到票的,就只能等待下一次,船返回来,再去抢下一张票。 好了,在多线程编程中,我们也可以引入这样一个售票处,让线程先去抢票,抢到票的,就可以使用这只小船,抢不到的,就继续等待
海纳
2018-03-02
7890
用Atomic实现锁
一直想写ReentrantLock,就得先介绍AbstractQueueSynchronizer,可是我觉得这样写,不过瘾,我把代码贴一遍,懂的人自己就能找到这些代码看,不懂的人还是不懂。直到昨天灵机一动,不如自己从简到难重新写一遍,带着读者跳几个坑,可能就好了。 java.util.concurrent.lock下的几个锁以及synchronized锁其实背后都要使用atomic操作,那我们不妨就使用atomic操作把锁实现一遍。 咱们先从最简单的开始。 互斥 并发模型中,最简单的问题,就是互斥。一个公共
海纳
2018-03-02
8330
新生代的垃圾回收:Copy GC之基本原理
据我所能查到的资料,基于复制的GC算法最早是Marvin Minsky提出来的。 这个算法的思路很简单,总的来说,就是把空间分成两部分,一个叫分配空间(Allocation Space),一个是幸存者空间(Survivor Space)。创建新的对象的时候都是在分配空间里创建。在GC的时候,把分配空间里的活动对象复制到Survivor Space,把原来的分配空间全部清空。然后把这两个空间交换,就是说Allocation Space变成下一轮的Survivor Space,现在的Survivor Space
海纳
2018-03-02
1.3K0
Java的分代式GC
要说理解JVM的垃圾回收,什么引用计数,Copy GC,mark & compaction好像都不是必须要掌握的东西。真要说对普通的Java程序员比较重要的东西,我觉得必须得有分代式垃圾回收。 jst
海纳
2018-03-02
8430
【第四期】GC专题
我在某个技术群里发现很多人对GC的问题是最多的。确实,由于Java的GC经常会刷存在感(例如占用大量的CPU时间,full gc时直接失去响应),GC的问题就成了初级的Java程序员向中级程序员进步过程中不得不面对的一个问题。但是到目前为止,我还没有在网上看到一个系统的全面的针对Java GC进行总结的文章。我希望在我的公众号里专门针对Java GC做一下梳理。 这一期,我们先从Java的分代式GC讲起。 垃圾回收(Garbage Collection,GC),本质上是一种自动内存管理技术。我们知道在C或
海纳
2018-03-02
7130
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档