2 真理剑客

尚未进行身份认证

暂无相关描述

等级
博文 33
排名 15w+

1.3 并发编程的挑战

在并发编程时,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战。1、上下文切换CPU通过时间片分配算法来循环执行任务,CPU时间片一般几十毫秒(ms)。在切换至下一个任务前会保存上一个任务的状态。从保存A任务到加载B任务的过程就是一次上下文切换。linux系统可以使用vmstat监控线程切换频率。如何减少上下文切换无锁并发:多线程竞争锁,会引起上下文切换。将数据ID按H...

2019-05-17 19:50:59

1.1 Java线程

线程共包括以下5种状态。新建状态(New):线程对象被创建后,就进入了新建状态。例如,Threadthread=newThread()。就绪状态(Runnable):也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。线程只能从就绪状态进入到运行状态,处于就绪状态的线程,随...

2019-05-17 19:48:16

1.2 Java语言中的线程安全

讨论线程安全,需要线程之间存在共享数据访问这个前提。操作共享的数据可以分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立。不可变不可变的对象一定是线程安全的。对象的方法实现或方法的调用者都不用再采取任何额外的措施。基本数据类型,只要加上final关键字就可以保证不可变。如果是对象,则需要保证对象的行为不会对其属性产生影响。如String、Long、Double、Bi...

2019-05-17 19:43:07

1、并发基础

并行与并发并发(Concurrency)是说进程B的开始时间是在进程A的开始时间与结束时间之间,我们就说A和B是并发的。并行(ParallelExecution)是并发的真子集,指同一时间两个进程运行在不同的机器上或者同一个机器不同的核心上。1、线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步或者在调用方法进行任何其他的协调操...

2019-05-17 19:36:35

4、注释

避免注释注释并不“纯然地好”,实际上,注释最多也就是一种必须的恶。注释的恰当用法是弥补我们在用代码表达意图时的失败。如果你发现自己需要写注释,再想想看是否有办法翻盘,用代码来表达。为什么不准确的注释要比没注释坏得多。注释存在的时间越久,就离其所描述的代码越远,越来越变得全然错误。原因很简单。程序员不能坚持维护注释。代码在变动,在演化。从这里移到那里。彼此分离、重造又合到一处。很不幸,注释并...

2019-01-15 14:10:31

2 有意义的命名

名副其实:如果名称需要注释来补充,那就不算名副其实。注释不是善,而是某种情况下的必须的恶,要尽量避免。一旦发现有更好的名称就替换掉旧的。避免误导:如I与O做有意义的区分不做a1a2这种命名以读者能鉴别不同之处的命名来区分名称编码不要带有编码命名要足够清楚,精确是命名的要点。尽量不用前缀,用名称区分。不加修饰的接口,加修饰的实现除了循环计数器,避免使用单字母名称明确是...

2019-01-15 14:09:26

代码整洁之道笔记: 1、整洁代码

好代码我们将了解到好代码与差代码的差异,以及如何写出好代码、如何将糟糕的代码改成好代码。只知道怎么骑自行车并不代表会骑自行车,还是会从自行车上摔下来,除了掌握原则和模式,还要自己多实践。模仿是学习、创新的第一步,阅读大量代码,观察他人如何为错误决策付出代价,琢磨某段代码好在什么地方、坏在什么地方。<<代码整洁之道>>第一部分、介绍编写整洁代码的原则、模式和实践。...

2019-01-15 14:07:50

Java 代码性能优化(待完善)

1、使用final修饰符修饰类、方法为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,能够使性能平均提高50%。http://www.hawstein.com/posts/google-ja...

2018-12-19 10:48:03

Java 数组

一、什么是数组线性表(linearlist):0个或有限多个相同类型的数据元素的序列。线性表有两种物理结构:顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素,相邻两元素的存储位置也是挨着的。链式存储结构:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。Java中的数组结构就是线性表的顺序存储结构,Node之间的序列靠存储单元位...

2018-11-27 11:46:19

Java代码风格

1、换行1.1、一个项目可以选择一行80个字符或100个字符的限制,除了下述例外不可能满足列限制的行(例如,Javadoc中的一个长URL,或是一个长的JSNI方法参考)。package和import语句。注释中那些可能被剪切并粘贴到shell中的命令行。1.2、换行的基本准则是:倾向于在更高的语法级别处断开。如果在非赋值运算符处断开,那么在该符号前断开:点分隔符(.)、一个方法...

2018-11-19 17:32:54

IaaS,PaaS,SaaS 的区别

如下图所示,蓝色部分为自己承担的工作量。IaaS是云服务的最底层,主要提供一些基础资源(storage、Networking等)。它与PaaS的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。阿里云ECS、AmazonEC2PaaS提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需...

2018-11-15 10:37:05

排序算法02: 插入排序

插入排序是这样一种排序:为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。与选择排序一样,当前索引左边的元素是有序的,但它们的最终位置还不确定。插入排序所需的时间取决于输入中元素的初始顺序,在实际应用中对某些类型的非随即数组很有效。插入排序的比较次数范围为N-1~N^2/2插入排序的交换次数为范围为0~N^2/2Insertion.java...

2018-11-11 20:07:41

排序算法01: 选择排序

选择排序是这样的,首先,找到数组中最小的那个元素,将它与第一个元素交换。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序选择排序有如下两个特点:运行时间和输入无关,扫描一遍数组并不能为下一遍扫描提供什么信息。数据移动是最少的,选择排序用了N次交换,和数组大小是线性关系。Selection.javapublicclassSel...

2018-11-11 19:30:20

mime.types 与 nginx配置

**一、什么是MIME-TYPE**MIME——MultipurposeInternetMailExtension(多用途因特网邮件扩展)最初是为了满足电子邮件支持多字符集及附件而出现的。通过MIME,我们可以写一封既含有英文,又含有中文,再加上一个文件作为附件的邮件。这种含有多种类型数据的文件被称为多部分对象集合(Multipartmessages)。MIMEType不是个...

2018-11-09 14:28:21

Java 8 函数式接口 : Supplier、Function、Consumer、Predicate

函数式接口特点1、三种方法唯一的抽象方法使用default定义普通方法(默认方法),通过对象调用。使用static定义静态方法,通过接口名调用。2、一个新注解@FunctionInterface如果某一个接口就是为了函数式接口而生的,使用注解@FunctionalInterface告诉编译器这是一个函数式接口,明确这个函数中只有一个抽象方法,当你尝试在接口中编写多个抽象方法的时候编...

2018-11-02 16:39:03

Java 8 函数式编程 Lambda

Lambda表达式afunction(orasubroutine)defined,andpossiblycalled,withoutbeingboundtoanidentifier。一段带有输入参数的可执行语句块。在Java8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码。而定义行为最重要的那行代码,却混在中间不够突出。lambda表达式取代了匿...

2018-11-01 14:54:51

Java 8 函数式编程 如何优雅的使用Optional

Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在你对Optional的用法有一定了解的基础上的,如果你还不太了解Optional,可以先去看看相关教程,或者查阅Java文档。使用Optional,我们就可以把下面这样的代码进行改写。publicstaticStringgetNam...

2018-10-31 10:55:32

架构笔记02:高性能

1、技术发展与复杂度技术发展带来了性能上的提升,不一定带来复杂度的提升.只有那些并不是用来取代旧技术,而是开辟了一个全新领域的技术,才会给软件系统带来复杂度,因为软件系统在设计的时候就需要在这些技术之间进行选择或组合。2、软件系统中高性能带来的复杂度主要体现在两方面单台计算机内部为了高性能带来的复杂度;多台计算机集群为了高性能带来的复杂度。2.1、单机复杂度操作系统是软件系统的...

2018-10-29 13:48:50

程序、进程和线程

程序、进程和线程指令按照既定的逻辑控制计算机运行,程序是一组指令及参数的集合。进程则是运行着的程序。线程是进程中共享进程资源的一个执行单位。程序和进程的区别:程序作为一个静态文件存储在计算机系统的硬盘等存储空间中。进程则是处于动态条件下由操作系统维护的资源管理实体。可以从以下几个方面进行区别:进程是动态的,而程序是静态的。进程有生命周期,而程序是指令的集合,本身无"运动"的含义。...

2018-10-29 10:37:17

架构读书笔记01:什么是架构设计

1、架构设计的特点1、架构设计的关键思维是取舍与判断,程序设计的思维是实现与逻辑。2、架构设计需要适应业务与环境,没有固定的体系与标准2、架构设计的目的架构设计的主要目的是为了在自身环境的约束下满足业务需求,解决软件系统的复杂度所带来的问题。另外,架构师也需要关注项目架构是否会因为开发新业务而引入新的复杂度找出问题:识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。架构设计...

2018-10-25 15:06:11
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。