ZHENGRUI'BLOG

读书、健身、旅行


  • Home

  • Archives

  • About

  • Search

java并发框架浅析

Posted on 2018-03-12 | In Java基础知识 | | Visitors
本博客主要介绍JDK5.0后引入的java.util.cocurrent包下的相应并发框架类。并发编程是复杂的,而使用这些并发框架类可以有效降低并发编程的开发难度,提升编码效率与代码健壮性。 Executor框架这是一个线程池框架,主要成员包括Executor,Executors,ExecutorService,CompletionService,ThreadPoolExecutor,Future,Callable等。 Executor框架的顶级接口,提供了一个execute方法,接受一个Runnable实例,用来执行一个任务(即继承了Runnable的类)。 ExecutorService继 ...
Read more »

浅析java线程安全和加锁机制

Posted on 2018-03-01 | In Java源码浅析 | | Visitors
随着CPU核心的价格越来越低,多核时代来临。为了充分发挥多核CPU的优势,各大编程语言纷纷对多线程进行了支持,比如Java。特别是在大规模,高并发的web开发中,为了提高系统吞吐率和资源利用率,多线程不和避免,同时我们所使用的各种开源框架基本上都是多线程。但是多线程比单线程要更加复杂,我们必须保证其线程安全性,这就需要用到java中同步和锁。但这些总归只是一些机制,要编写线程安全的代码,其核心在于要对状态访问操作进行管理,我们需要理解对象是否有状态,状态是否可变,可变是否共享,是读操作还是写操作。 对象的状态线程同步代码是复杂的,并且往往会抑制某些编译器优化,造成额外的性能开销,比如使内存缓存 ...
Read more »

重构方法列表

Posted on 2017-11-04 | In 代码规约 | | Visitors
以前一直觉得重构是一种很高大上的事情,但最近在看了《重构》这本书后明白这是每一个程序员都应该掌握的很基础的技能,我们应该将它融入自己的骨血,以后再需要时可以向喝水呼吸一般自然的使用它。为了方便以后时常查阅,在这里将里面的作者总结的重构方法列表记录一下。 重新组织函数 提炼函数(Extract Method) 当我们遇到过长函数或者需要用注释来说明的代码,我们应该将里面的相关代码提炼出来,形成一个新的函数,并用函数名来说明它的用途,哪怕它可能只有一行代码。 内联函数(Inline Method) 这与提炼函数相反,即如果这个函数体可以和函数名一样清晰易懂,那么就应该将它放回到原先的函数中。 ...
Read more »

设计模式记忆书

Posted on 2017-11-01 | In 设计模式 | | Visitors
设计模式看了很多遍但总是记不住,因此在这里打算通过定义,UML类图,代码示例的方式对这些模式进行一些简单的提炼,便于以后记忆。当然很多人说过设计模式不过是面向对象原则的延伸,只要吃透了六项基本原则(事实上可能更多)便不需要死记硬背这些设计模式。但我应该还没达到这个境界,而且我认为设计模式是前人的一些经验的总结,站在巨人的肩膀上我们总会有更高的生产力。这里主要记录下大家说的最多的GoF的23种设计模式(事实上随着现在web项目和并发编程的发展已不止这些),希望以后当我翻开这篇博客就能重新清晰在我脑海中的关于设计模式的概念。 面向对象的原则这里简单介绍一下面向对象的一些原则。笔者最先接触OO原则时 ...
Read more »

索引及sql语句的优化

Posted on 2017-10-09 | In 数据库 | | Visitors
后台项目常常会和数据库打交道,必要的时候可能还需要自己手写一些sql语句,因此我们必须了解一下索引以及如何写出使用索引的高性能的sql语句。毕竟使用索引和不使用索引在数据量很大时的查询时间可能相差很多倍。 索引为什么能提高查询效率数据库中的数据是存储在计算机的磁盘上的,每次去读数据时都会发生磁盘IO。而磁盘IO的时间和在数据内存里运行的时间相差很大,因此磁盘IO的时间便可相近于查询数据的时间。而索引便能有效的减少磁盘IO的次数。 索引的分类有很多,比如B-Tree,hash,R-Tree,Full-Text等,但最常用的是B-Tree索引。B-Tree索引的本质是一棵B+树,B+只在叶子结点存 ...
Read more »

几种流行的JSON库介绍

Posted on 2017-06-02 | In Framework | | Visitors
近年来JSON作为一个流行的数据交换格式逐渐取代了XML在网络通信方面的作用。基于REST原则的面向资源的方式再加上使用JSON串携带数据已经成为了成为了客户端和服务器端传递数据的主流。而在JAVA中便需要一些将POJO转换为标准的JSON的库来减轻开发人员的工作量。下面介绍一下当下流行的几种JSON库。 fastjsonfastjson应该算是当下国内最流行的一个Json库,它是阿里的一位大神采用Java语言编写的。据说有无与伦比的性能,在解析速度上完虐国外其他的JSON库,但是网上的评论并不友好,看来是否真的完虐还值得商榷。本人也没有做过性能测试,这里便不置喙。但是在国内这个库确实相当的流 ...
Read more »

基本数据结构

Posted on 2017-04-10 | In 数据结构与算法 | | Visitors
数据结构是面试中常问的一个知识点,它是计算机中用于存储,操作数据的方式。常用的有线性表,树,图等。虽然我作为一个Java工程师对数据结构的使用着实不多,但这也是大学中学过的重要知识点,这里就在这总结以下,万一以后面试时被问到也可以扯一点。 线性表线性表是是常用的数据结构之一,这里要介绍的是数组和链表。这两个是用的最多的线性结构,被广泛用于各种语言,如Java中的集合底层便是由数组和链表组成。 数组在存储大量数据时数组时被用到最多的数据结构,对这个东西大家应该都比较熟悉,这里就不做赘述了。 链表虽然数组已经很好地满足我们存储大量数据的要求,但是在某些情况下它显然不能是我们满意。比如,如果我们需要 ...
Read more »

查找

Posted on 2017-04-10 | In 数据结构与算法 | | Visitors
查找算法分为动态查找和静态查找两种,动态查找主要是B树,AVL树,红黑树等(比较复杂这里就不做介绍);静态查找表主要就是查找数组(还有一个是hash查找),这里介绍一下常用的静态查找算法。 动态查找与静态查找的不同处在于动态查找的表是在查找过程中动态生成的。 顺序查找这既是最常用的查找,是针对无序表的查找方法,即将待查找的数表中的数逐个比较。时间复杂度:O(n)。平均查找长度:(n+1)/2 折半查找针对有序表的查找方法,将表逐次二分,取中间值与待查找值比较,决定查找哪一半。时间复杂度:O(logn)。分割点:mid=(low+high)/2。平均查找长度:log2N 123456789101 ...
Read more »

排序

Posted on 2017-04-10 | In 数据结构与算法 | | Visitors
排序是基本的算法之一,也是在面试中被问的最多的问题。即将开始找工作,便趁此机会复习一下这些早已被忘却的知识(估计之后我还会忘记它)。 排序如果按照程序运行的地点,可将它分为内部排序和外部排序。内部排序即是数据都放在内存中,但是有时候我们的数据量很大内存无法容纳,就需要将数据放在磁盘中,然后分段放入内存中排序。 排序算法有稳定和不稳定之分。所谓稳定性即是当序列中有两个相同的数据时,排序前和排序后它俩的顺序不变,能实现这种情况的排序算法我们说他是稳定的。 插入排序基本思想插入排序的基本思想是将一个记录插入到已经排好序的序列中,它默认将第一个元素视为一个已经排好序的序列,后面的元素从后向前逐个扫描, ...
Read more »

TCP协议与UDP协议

Posted on 2017-04-01 | In 网络协议 | | Visitors
一 TCP协议简介(这篇博文之后会修改,现在先打个提纲)TCp协议的特点 是面向连接的。应用程序在使用TCP协议时,必须进行连接;当然,数据传输结束后,要断开TCP连接。 TCP连接是点对点的。 TCP连接时可靠的。也就是说传输的数据时无差错的、不丢失、不重复、有序到达的。 是全双工的。即TCP连接的两端都设有发送缓存和接收缓存,用来存放双向通信的数据。 是面向字节流的。也就是说TCP将应用程序交下来的数据看成仅仅是一连串的无结构的字节流,其不知道这些字节流的具体含义。TCP协议无法保证发送的数据块的具体大小,因为TCP协议的发送的数据大小受到对方给出的窗口值和当前的网络拥塞度的影响。TCP的 ...
Read more »
1…345…8
zhengrui

zhengrui

读书、健身、旅行

71 posts
15 categories
119 tags
RSS
GitHub Weibo Facebook
Links
  • 我康军的博客
  • 我的简历
© 2020 zhengrui
Powered by Hexo
Theme - NexT.Mist