2017阅读计划

总是等到过完农历的新年才会觉得新的一年才真正的开始,元旦仿佛没有什么卵用,回首过去的一年,有很多收获,同时也有不少遗憾,京东做活动的时候买的书还有好多没有读完,新的一年,新的开始,书要一步一步的读,代码要一字一字得码,希望2017年能够更上一层楼。下面的只是个大概的提纲,没有具体的每天读几页,多少天读完等很严格的规划,因为生活中有很多突发事件会影响自己,公司加班、生病发烧,聚餐啊,跳槽等等…无法预测,用尽一切时间去学:在地铁上看,在饭后看,睡觉前少看会儿手机多读一会儿书,让心流的时间加长,高效专注的完成之后再休息。 技术方面首先,肯定是要去库存,去年京东做活动买的没读完的书争取在上半年读完。No.1《Redis设计与实现》Redis不仅是一个缓存工具,而且还是一个nosql的实现,性能极其强大,目前No.2《编程珠玑》编程方面的属于元老级别的书吧,修炼自己的内功必备,想吃透这本书我觉得一年都不一定行。No.3《Spring实战》原本是买来给女朋友入门Spring的…我先撸一遍吧,里面的例子还是很清晰的,适合初学者,我更倾向于看《Spring揭密》。No.4《Linux命令行与shell脚本编程大全(第3版)》作为一个Java行业从业者,Linux自然是必不可少的,提高自己的Linux姿势水平势在必行。No.5《利用Python进行数据分析》去年读完了《Python基础教程》,还是应该投入实际的用途,学学用Python进行数据分析吧。No.6《高性能Mysql》这个板砖书,还是看电子版的好了,放在ipad里也极其方便,不一定全部看完,但是重要章节一定得看完,而且得熟练,互联网公司必备。No.7《敏捷软件开发原则、模式与实践》再重新读一遍此神书,了解如何编写优雅的代码。

散文随笔

Kafka入门

1.环境配置kafka依赖zookeeper来调度,以及选举leader,因此需要先安装zookeeper 1.1 安装zookeeper点击下载zookeeper下载合适版本的zookeeper,当前最新的稳定版本是3.4.9创建好数据目录,命名为data,下一步配置用到 12$ cd opt/ && tar -zxf zookeeper-3.4.6.tar.gz && cd zookeeper-3.4.6$ mkdir data 1.2 配置zookeeper123456$ vi conf/zoo.cfgtickTime=2000dataDir=/path/to/zookeeper/dataclientPort=2181initLimit=5syncLimit=2 1.3 启动zookeeper1$ bin/zkServer.sh start 相应的停止zookeeper的命令为: 1$ bin/zkServer.sh stop 1.4 启动zookeeper CLI1$ bin/zkCli.sh

技术随笔

清醒思考的艺术

大学的时候读过的一本书,当年排行德国非小说类的第一名,现在又抽空读了一遍,感觉获益颇多,每一篇都很简短,用很小的生活中的例子来解释看似很平常的一些思维谬误,这本书有个很好玩的副标题你最好让别人去犯的52个思维错误,能感受到作者的诙谐和幽默。作者在前言里就说了,生活中的思维错误是不可能避免的,能够意识到并且尽量在生活中少犯就好了,让我说其实更像是程序的bug,是无法避免的,在编程(思考)的时候多加注意就好了。 一、幸存偏误幸存偏误指的是,在生活中更容易看到成功,看不到失败,所以会过高的估计自己成功的希望。最常见的例子 每个成功的人都很努力,所以努力的人都能成功。 这种就是典型的只看到了成功的人而忽视了那些失败的人。所以作者在文章中提醒我们要常常逛逛墓地,看看那些失败者的案例,能够让我们能加清醒的思考。 二、游泳运动员错觉

散文随笔

Java中的互斥锁和读写锁

在JDK5之前,访问共享对象的时候使用的机制只有synchronized和volatile ,JDK5的并发包里提供了一种新的更加高级的机制:互斥锁ReentrantLock,显式锁是为了弥补内置锁的方法而开发的,两者是互补的关系,显式锁并不能代替内置锁。ReentrantLock实现了一种标准的互斥锁,亦即每次最多有一个线程能够持有ReentrantLock Lock接口&ReentrantLock简介concurrent包中的Lock类定义了一组抽象的加锁操作,如下代码所示,与synchronized不同的是,Lock提供了一种无条件、可轮询、定时、可中断的锁获取操作,所有的加锁和解锁操作都是显示的ReentrantLock实现了Lock接口,提供了与synchronized相同的互斥性以及内存可见性。与synchronized一样,ReentrantLock提供了可重入(即可以被单个线程多次获取)的加锁语义。 123456789public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition();} ReentrantLock的使用方法: 12345678Lock lock = new ReentrantLock();...lock.lock();try{} finally{ lock.unlock();} 在使用显示锁的时候一定要在finally块中释放锁,否则如果代码中一旦出现异常,那么可能这个锁永远都无法释放就会造成某个对象的状态不一致,如果是账户余额或者别的重要的信息可能就会出现很严重的事故。

java

使用Btrace来跟踪调试代码

有的时候在写程序的时候可能有些地方的日志没有照顾到,产生了bug,如果到了线上环境,有时候不得不停掉服务重新来加入日志来查看产生bug的地方,这个时候Btrace就派的上用场了,在VisualVM中可以很方便的调试目标程序,而对原有项目没有影响,当然也可以不用VisualVM而使用命令行来实现这个功能。Btrace是一个开源项目,项目托管在github上 使用VisualVM的Btrace插件最为方便,下面就写个小例子来熟悉一下 准备工作1.在visualvm官网下载visualVM可视化工具2.依次点击visualVM菜单栏的Tool->plugins打开插件窗口,选择 Btrace workBench 然后一路 next安装 目标程序 准备了一个简单的小程序:从键盘接收两个数字然后计算两个数字之和,主要目的是方便下一步用Btrace来调试打印出方法的参数的值,以及堆栈信息 12345678910111213141516171819202122232425package org.xuan.trace;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * Created by Xuan on 2016/9/10. */public class BTraceTest { public int add(int a ,int b){ return a+b; } public static void main(String[] args) throws IOException { BTraceTest traceTest= new BTraceTest(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 10; i++) { reader.readLine(); int a = (int)Math.round(Math.random()*1000); int b = (int)Math.round(Math.random()*1000); System.out.println(traceTest.add(a,b)); } }}

java

Java List实现group by

一般情况下我们可能很熟悉在数据库中使用group by来分组一些数据,但是如果数据来源不是数据库的话可能就需要通过在代码中实现group by了 例子:比如有一组书Book的集合,我们要按照书的类型(type)分组 12345678910111213package org.xuan;import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class Book { private String name; private String type; private double price;} 增加几本书到list 123456789List <Book> bookList =Arrays.asList( new Book("java programming","java",123.1D), new Book("java in concurrency","java",123.2D), new Book("c++ primary","c++",123.3D), new Book("groovy in action","groovy",123.4D), new Book("effective java","java",123.5D), new Book("jvm in practice","java",123.6D), new Book("scala in action","scala",123.7D) );

java

Java NIO创建步骤

NIO创建过程一、打开ServerSocketChannel,用于监听客户端的连接 1ServerSocketChannel acceptSvr = ServerSocketChannel.open(); 二、绑定监听端口,设置连接为非阻塞模式 12acceptSvr.socket().bind(new InetSocketAddress(InetAddress.getByName("IP"),port));accptSvr.configureBlocking(false); 三、创建Reactor线程,创建多路复用器并启动线程 12Selector selector = Selector.open();new Thread(new ReactorTask()).start();

java

Java工程师(后端)技能树

我的Java技能树点亮之路 编程思想脱离于语言之上的一些不变的知识 设计模式,重构,Clean Code ,代码大全,Unix编程艺术 算法导论什么的就算了,但是至少得学会实现《数据结构》上的集中最基本的数据结构,java实现 理解 SOA面向服务架构 工具加成让自己的开发工具从小刀变成 Linux &shell &vim Ngix 工具类 google guava, apache-commons 构建工具maven,gradle Web容器 tomcat 版本控制git java8新特性 mysql&mariadb 数据库进阶,慢查询,数据库引擎,索引 熟悉Http,《图解HTTP》 了解使用noSql,mongodb

java

Java内存模型【译】

本文翻译自 Java Memory Model旨在加深自己对Java Memory Model (JMM)的理解。 The Java memory model specifies how the Java virtual machine works with the computer’s memory (RAM).The Java virtual machine is a model of a whole computer so this model naturally includes a memory model - AKA the Java memory model.It is very important to understand the Java memory model if you want to design correctly behaving concurrent programs.The Java memory model specifies how and when different threads can see values written to shared variables by other threads, and how to synchronize access to shared variables when necessary.The original Java memory model was insufficient, so the Java memory model was revised in Java 1.5. This version of the Java memory model is still in use in Java 8. Java内存模型详述了java虚拟机如何与物理机的RAM的一起工作的,java虚拟机是整个计算机的模型,所以这个模型自然包括内存模型,这个模型卡就是Java内存模型。如果你想正确的设计并发程序,知道Java内存模型是非常重要的java内存模型详解了多个不同的线程是何时而又如何写入一个共享的变量的,还有如何同步的访问一个共享变量。原来的Java内存模型是不足的,所以Java内存模型在java 5中重新修订了,这个版本的java内存模型一直在Java8中还在使用。 内部的java内存模型 The Java memory model used internally in the JVM divides memory between thread stacks and the heap. This diagram illustrates the Java memory model from a logic perspective:

java

cURL命令的使用

Linux curl命令的使用 参考官方文档 https://curl.haxx.se/docs/manpage.html 一、什么是cURL wikipedia中的解释如下: cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。 cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。 简单的说,cURL就是把发出请求然后得到响应并把响应数据显示到标准输出上的一个命令行工具。 语法: curl [option] [URL] 二、cURL的用法1. 保存curl的结果到文件curl -o [filename] [URL] 比如要保存 http://zeusjava.com 到blog.html中,可以使用 curl -o blog.html http://zeusjava.com 当然,也可以直接用 curl http://zeusjava.com >blog.html 1$ curl -o blog.html http://zeusjava.com 使用 -o 也可以用于下载文件 curl -o android-studio-2.0.exe https://dl.google.com/dl/android/studio/install/2.0.0.20/android-studio-bundle-143.2739321-windows.exe 使用 -O可以将下载的文件名自动命名为服务器端文件的名字 curl -O https://dl.google.com/dl/android/studio/install/2.0.0.20/android-studio-bundle-143.2739321-windows.exe

技术随笔
15678910

本站由 Hank Zhao 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
本站总访问量