Browsed by
标签:并发编程

程序员必读书单 1.0

程序员必读书单 1.0

閱讀本文約花費: 80 (分鐘)本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的 程序设计 能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络); 熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python); 专业的 软件开发 素养: 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码; 把握客户需求,按时交付客户所需要的软件产品; 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。 和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的…

Read More Read More

Java 中队列同步器 AQS(AbstractQueuedSynchronizer)实现原理

Java 中队列同步器 AQS(AbstractQueuedSynchronizer)实现原理

閱讀本文約花費: 29 (分鐘)前言 在 Java 中通过锁来控制多个线程对共享资源的访问,使用 Java 编程语言开发的朋友都知道,可以通过 synchronized 关键字来实现锁的功能,它可以隐式的获取锁,也就是说我们使用该关键字并不需要去关心锁的获取和释放过程,但是在提供方便的同时也意味着其灵活性的下降。例如,有这样的一个场景,先获取锁 A,然后再获取锁 B,当锁 B 获取到之后,释放锁 A 同时获取锁 C,当获取锁 C 后,再释放锁 B 同时获取锁 D,依次类推,像这种比较复杂的场景,使用 synchronized 关键字就比较难实现了。在 Java SE 5 之后,新增加了 Lock 接口和一系列的实现类来提供和 synchronized 关键字一样的功能,它需要我们显示的进行锁的获取和释放,除此之外还提供了可响应中断的锁获取操作以及超时获取锁等同步特性。JDK 中提供的 Lock 接口实现类大部分都是聚合一个同步器 AQS 的子类来实现多线程的访问控制的,下面我们看看这个构建锁和其它同步组件的基础框架——队列同步器 AQS(AbstractQueuedSynchronizer)。 AQS 基础数据结构 同步队列 队列同步器 AQS(下文简称为同步器)主要是依赖于内部的一个 FIFO(first-in-first-out)双向队列来对同步状态进行管理的,当线程获取同步状…

Read More Read More

软件架构设计-五视图方法论(2)

软件架构设计-五视图方法论(2)

閱讀本文約花費: 8 (分鐘)1.每个人都可以做成为架构设计师 不懂软件的和刚入行的人们一听到架构设计,都认为是非常的高大上课题,是一个遥不可及的领域,一般人是不能做的。听起来云里雾里的,第一印象除了来自微软,阿里这些NB的公司里面的人其余的都不能做出架构似的,这是一种先入为主的思想,因为大家都在强调架构师的重要性,他的薪资有多么的高,在整个社会对他的认定导致很多人对架构设计望而生畏。放正自己的心态其实架构设计并没有多么的复杂。我们是从编码入行的,在编码实现功能的过程中我们或多或少的设计了属于自己的软件架构了。 为什么说软件架构师需要多少年的工作经验,因为软件架构就是系统的草图,不仅是代 码编写而且包括部署,运行、开发等这些方面进行设计,目的是为了保证软件开发、运行、扩展、性能、安全、伸缩等等质量的一个保证。只要在编码过程中不仅仅要提升编码的质量而且要留心其他方面的知识积累与学习,用不了多久你也能成为一位优秀的架构设计师。 2.什么是架构设计 我们要成为架构设计师我们需要了解什么是架构设计。简单一点,架构设计就是一个系统的草图,描述了构成系统的抽象组件,以及各个组件之间的是如何进行通讯的,这些组件在实现过程中可以被细化为实际的组件比如类或者对象。在面向对象领域中,组件之间的联通通常面向于接口实现的。 在“软件架构简介”中David Garlan 和Mary Shaw 认为软件架构师…

Read More Read More

子网与超网-Kubernetes基础知识

子网与超网-Kubernetes基础知识

閱讀本文約花費: 7 (分鐘)子网 1、IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为子网。 2、作用::IP数据包从网际上的一个网络到达另一个网络时,选择路径可以基于网络而不是主机。在大型的网际中,这一点优势特别明显,因为路由表中只存储网络信息而不是主机信息,这样可以大大简化路由表。 3、因为有了子网,就产生了子网掩码。子网掩码的作用就是用来判断任意两个IP地址是否属于同一子网络,这时只有在同一子网的计算机才能”直接”互通。 4、子网掩码与IP地址都是由4个数段组成,每个数段的取值范围是0-255(共256个值,等于2的8次方),如我们在搭建局域网时通常用到的IP地址192.168.1.1,子网掩码255.255.255.0,当然十进制是为了方便人的理解,转换成机器能识别的二进制后,每个数段由8个0或1组成,一个完整的IP地址或子网掩码就转换成32个0或1组成的序列。子网掩码与IP地址是组合使用的,IP地址我们都知道是计算机在网络内的唯一标识,而子网掩码顾名思义是用于划分子网的,下面通过几个例子进行讲解。   (1)255.255.255.0   子网掩码由连续的1和0组成,连续的1表示网…

Read More Read More

Java中如何锁文件

Java中如何锁文件

閱讀本文約花費: 8 (分鐘)Java中如何锁文件 1. 概览 当读写文件时,需要确保有适当的文件锁定机制,来保证基于并发I/O应用程序的数据完整性。 「本教程中, 我们将介绍使用 Java NIO 库实现这一点的各种方法。」 2. 文件锁简介 「一般来说,有两种锁」: 独占锁——也称为写锁 共享锁——也称为读锁 简单地说,在写操作完成时,独占锁防止所有其他操作(包括读操作)。 相反,共享锁允许多个进程同时读取。读锁的目的是防止另一个进程获取写锁。通常,处于一致状态的文件确实应该被任何进程读取。 在下一节中,我们将看到Java如何处理这些类型的锁。 3. Java中的文件锁 Java NIO库支持在操作系统级别锁定文件。FileChannel 中的lock() 和*tryLock()*方法就是为了这个而存在。 我们可以通过 FileInputStream, FileOutputStream,RandomAccessFile 来获取FileChannel,三者均可通过 getChannel() 方法返回 FileChannel对象. 或者, 我们可以直接通过静态方法 open 来创建 FileChannel  : try (FileChannel chan…

Read More Read More

Scroll Up