一、编程语言
文章平均质量分 96
syrdbt
这个作者很懒,什么都没留下…
展开
-
Netty 入门实例
Netty 是一款用于高效开发网络应用的 NIO 网络框架,它大大简化了网络应用的开发过程。Netty 相比 JDK NIO 的优势:● 易用性:Netty 在 NIO 基础上进行了更高层次的封装,屏蔽了 NIO 的复杂性,大大降低了开发者的上手难度;● 稳定性:Netty 修复和完善了 JDK NIO 较多已知问题,例:select 空转导致 CPU 消耗 100%,TCP 断线重连,keep-alive 检测等问题;原创 2024-06-22 23:02:39 · 803 阅读 · 0 评论 -
什么是 Shell,Shell 功能介绍和脚本编程入门实例
1. 概述Shell 是一种交互工具,为用户提供了启动程序、管理文件系统中的文件和运行在Linux系统上的进程。Shell 的核心是命令行提示符,命令行提示提示符是 Shell 负责交互的部分,允许输入命令,然后解释命令,并在内核中执行。Shell 包含了一组内部命令,这些命令可以创建文件(touch命令)、移动文件(mv命令)等;2. 在这里插入代码片输出 HelloWorld 示例打开控制台终端,输入以下命令,创建helloWorld.sh脚本。vi helloWorld.sh点击回车进原创 2020-10-24 16:00:38 · 705 阅读 · 0 评论 -
Java 阻塞队列实现生产者和消费者场景
1. 阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。当阻塞队列满时,如果生产者线程使用put方法向队列中添加元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。当队列空时,消费者使用take方法从队列中获取元素,队列也会阻塞消费者线程,...原创 2020-02-26 12:08:14 · 794 阅读 · 0 评论 -
Java8 HashSet 源码阅读
1. 概述HashSet 保证元素不重复的集合,查询元素、新增元素、删除元素的时间复杂度均为 O(1)。HashSet 底层的数据结构为 HashMap,HashMap 中存储的键值对,key 为 Set 集合中的元素,value 统一使用一个静态常量;private transient HashMap<E,Object> map;private static final ...原创 2020-02-03 21:59:59 · 232 阅读 · 0 评论 -
JVM 创建 Java 对象
JVM 创建 Java 对象的流程:类的加载,内存分配、对对象进行必要的设置、执行 <init> 方法初始化。1.JVM 创建 Java 对象使用 new 关键字可以创建一个类的对象。new指令在虚拟机中的执行操作: 类的加载:首先在常量池(方法区中)去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和...原创 2019-06-25 10:53:25 · 177 阅读 · 0 评论 -
Java并发之CAS (Compare and Swap)
CAS(Compare and Swap)比较并替换,CAS是实现乐观锁的一个重要操作。CAS 是一个硬件指令,保证是原子操作。 Java 中通过 UnSafe 来实现。 原子类: AtomicBoolean,AtomicInteger,AtomicLong 等使用 CAS 实现。1. 概述CAS的基本步骤:执行函数 CAS(V,E,N),如果V值等于E值,则将V的值设为...原创 2019-06-04 21:36:17 · 2097 阅读 · 12 评论 -
Java 并发工具类之 Semaphore
Semaphore控制访问特定资源的线程数量,新建规定数量的许可证,获得许可证可以继续执行,未获得需要阻塞,执行完成归还许可证,这样其余的线程(未获得许可证)才可以执行。例如:Semaphore用于流量控制,例如只有10个数据库连接,可以用Semaphore控制只有10个线程访问数据库,这样就不会报错无法获取数据库连接。1.Semaphore的部分方法方法 描述 pub...原创 2019-06-19 10:17:17 · 266 阅读 · 0 评论 -
Java 中的继承
继承:可以基于已存在的类构造一个新类,继承已存在的类就是复用(继承)这些类的方法和域,在此基础上,还可以添加一些新的方法和域。1.继承性继承性:把多种有着共同特性的多的类事物抽象成一个类,这个类就是多个类的父类。父类的意义在于可以抽取多个类的共性,代码复用,减少代码量。例:三个类,Pupil类(小学生),MiddleSchoolStudent类(中学生类),CollegeSt...原创 2019-06-02 20:21:49 · 280 阅读 · 0 评论 -
Java 并发工具类之 CyclicBarrier
CyclicBarrier ,可循环(计数器可以重置)利用的同步屏障,线程到达一个屏障会阻塞,到达屏障的线程数达到设置的值时,所有被屏障阻塞的线程开始执行。1.概述构造函数:public CyclicBarrier(int parties),设置初始值。public CyclicBarrier(int parties, Runnable barrierAction),优先执行...原创 2019-06-18 21:49:43 · 256 阅读 · 0 评论 -
Java 并发工具类 CountDownLatch
CountDownLatch 工具类可以初始一个计数值,在计数值为0之前,可以使用 await() 方法进行阻塞,调用countDown()方法该计数值减1。应用场景:一项大的工作,分成5份,计数值初始为5,每下载好一份,计数值减1,5份全部下好,计数值为0,开始执行await()之后的操作。1.概述构造函数,初始计数值为count :public CountDownLatch(...原创 2019-06-18 20:49:39 · 445 阅读 · 0 评论 -
JUC 可重入 读写锁 ReentrantReadWriteLock
原文地址:http://ifeve.com/juc-reentrantreadwritelock/转载自:并发编程网本文首先发表在码蜂笔记读写锁 ReadWriteLock读写锁维护了一对相关的锁,一个用于只读操作,一个用于写入操作。只要没有writer,读取锁可以由多个reader线程同时保持。写入锁是独占的。互斥锁一次只允许一个线程访问共享数据,哪怕进行的是只读操作;读写...转载 2019-06-18 16:58:50 · 172 阅读 · 0 评论 -
JVM虚拟机的类加载
类加载的生命周期:加载、验证、准备、解析、初始化、使用和 卸载 ,一共 7个阶段。1.概述在虚拟机的类加载机制中:类型的加载、连接和初始化 都是在程序运行期间完成的。这种策略会使类加载时稍微增加一些性能开销, 但是为 Java 提供了高度的灵活性 , 如 Java 的动态扩展语言特性就是依赖运行期动态加载和动态连接这个特点实现。举例: 如果编写一个面向接口的应用程序,可...原创 2019-06-26 18:06:36 · 174 阅读 · 0 评论 -
Java 中 Holder 方式 和 枚举方式 实现单例模式
Holder 方式 和 枚举方式可以线程安全的实现单例模式。Holder 方式借助于类加载的初始化阶段<clinit>()方法是同步方法。枚举方式是因为枚举类型不能继承且只能被实例化一次。1.Holder 方式实现单例模式类加载的初始化阶段<clinit>()方法是同步方法,在类中设置一个静态类,将唯一实例放在静态类中,第一次访问实例...原创 2019-06-26 18:49:10 · 3849 阅读 · 0 评论 -
JVM 判断是否应该回收对象
JVM内存 中程序计数器、虚拟机栈、本地方法栈 3个区域随线程而生,随线程而灭。这几个区域不用考虑回收问题,因为方法结束后或者线程结束后,内存就跟着回收了。而Java堆和方法区不一样,一个接口的多个实现类需要的内存不一样,一个方法的多个分支需要的内存也可能不一样,我们只有在程序运行的时候才知道会创建那些对象,这部分内存的分配和回收都是动态的,垃圾收集主要所关注的就是Java堆和方法区。...原创 2019-07-01 14:18:40 · 224 阅读 · 0 评论 -
JVM的垃圾收集(GC)算法
JVM的垃圾收集算法:标记-清除,复制,标记-整理,分代回收。1.“标记-清除”垃圾收集算法“标记-清除”垃圾收集算法有两个阶段:标记 和 清除。标记 是标记所有需要回收的对象,清除 是清除所有标记的回收对象。缺点:(1)会产生大量不连续的内存碎片,因为对象分配内存需要是连续的内存空间,如果对象太大,且没有足够大的连续内存空间,会触发垃圾回收。(2)标记 和 清除效...原创 2019-07-15 20:23:14 · 206 阅读 · 0 评论 -
JVM 的垃圾收集器
JVM 的垃圾收集器:Serial、ParNew 、Parallel Scavenge、Serial Old、Parallel Old、CMS 、G1 。1.概述下图中垃圾收集器只要连线则表明垃圾收集器可以搭配使用。没有万能的收集器,具体应用选择合适的垃圾收集器。2.Serial垃圾收集器单线程收集器,用于新生代,这里的单线程指的是它在进行垃圾回收时暂停其他工作线程...原创 2019-07-19 09:43:15 · 167 阅读 · 0 评论 -
Java 使用 Callable 接口创建线程
使用 Callable 接口创建线程相较于实现Runnable接口方式的优点:可以有返回值,可以抛出异常。1.概述Callable接口的源码如下所示:@FunctionalInterface表名是一个函数式的接口,可以有返回值V (泛型),可以抛出异常throwsException。call方法类似Runnable接口中的run方法,作为线程的执行体。...原创 2019-07-19 11:06:51 · 498 阅读 · 0 评论 -
Java8 原子类 AtomicInteger 源码阅读
AtomicInteger 是用CAS(CompreAndSwap,乐观锁) 构造的一个原子类。1.CASCAS(Compare and Swap)比较并替换,CAS是实现乐观锁的一个重要操作。CAS 是一个硬件指令,保证是原子操作,Java 中通过 UnSafe 来实现。详细可一下我的这篇博文:传送。CAS的基本步骤:执行函数 CAS(V,E,N),如果V值等于E...原创 2019-07-28 18:11:53 · 704 阅读 · 0 评论 -
Java 读写锁 之 锁降级
锁降级 :是指保持住当前的写锁(已拥有),再获取读锁,随后释放写锁的过程。1.锁降级的用途举一个场景:数据不常变化,多个线程可以对数据进行并发的处理,如果当前线程感知数据变化,则进行数据处理操作,而其他线程则会被阻塞,直至当前线程完成数据的准备操作,这时候就需要使用锁降级。具体代码,update(是否更新的标志, false 标识可以更新,volatile修饰,使所有线程能够...原创 2019-06-18 19:47:03 · 4773 阅读 · 10 评论 -
Java 中的类与对象
类是构造对象的模板,由类构造(construct) 对象的过程称为创建类的实例 (instance)。对象中的数据称为实例域(instance field), 操纵数据的过程称为方法(method)。对于每个特定的类实例(对象)都有一组特定的实例域值,这些值的集合就是这个对象的当前状态( state )。1. 封装性封装性:将数据和对数据的操作封装起来,对象状态(属性)由这...原创 2019-06-02 18:19:58 · 3585 阅读 · 0 评论 -
Java创建多线程的两种方式:继承Thread类和实现Runnable接口
继承Thread类:继承Thread类,再重写Thread类的Run方法,然后调用start()方法启动线程,启动线程后执行的是run方法。注意:多次启动线程(多次调用start()方法)是不合法的。实现Runnable接口:实现Runnable接口,再重写run方法,然后将这个实现类当做参数传给Thread类,例如:Thread dog = new Thread(runn,"小狗"),创建...原创 2019-04-20 11:44:10 · 14290 阅读 · 0 评论 -
Java 泛型详解
原文地址:https://blog.csdn.net/s10461/article/details/53941091目录1. 概述2. 一个栗子3. 特性:泛型只在编译阶段有效4. 泛型的使用4.3 泛型类4.4 泛型接口4.5 泛型通配符4.6 泛型方法4.6.1 泛型方法的基本用法4.6.2 类中的泛型方法4.6.3 泛型方法与可变参数4.6...转载 2019-04-28 21:11:42 · 154 阅读 · 0 评论 -
Java反射
网上好些都是这篇文章的转载,但是就找不到原文,如果您知道,请告知。反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的...转载 2019-05-03 21:28:16 · 189 阅读 · 0 评论 -
Java 字节流与字符流的区别详解
原文地址:https://www.cnblogs.com/DONGb/p/7844123.html1. 流的概念在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。2. 字节流与字符流在java.io包中操作文件内...转载 2019-05-02 21:25:50 · 17153 阅读 · 15 评论 -
Java的Set集合(HashSet、TreeSet)学习
1.概述Set 接口是Collection和IterAble的一个子接口,List集合中的元素是没有顺序的,并且元素不可以重复。实现List接口 的容器类有HashSet <E>类,TreeSet <E> 类。1.1HashSetHashSet类,不允许出现重复元素;允许包含值为null的元素,但最多只能有一个;不保证集合中元素的顺序,...原创 2019-04-13 20:09:51 · 395 阅读 · 0 评论 -
Java虚拟机(JVM)内存结构
Java虚拟机(JVM)执行程序时会将管理的内存分为若干个不同的数据区域,分别为:程序计数器(Program Counter Register)、虚拟机栈(VMStack)、本地方法栈(NativeStack)、堆(Heap)、方法区(MethodArea)。1.概述线程共享的数据区:堆(Heap)、方法区(MethodArea)。线程私有的数据区:程序计数器(Progr...原创 2019-04-21 12:51:32 · 305 阅读 · 0 评论 -
Java 的深拷贝和浅拷贝学习
1.为什么需要拷贝举一个例子,一个Student类,初始化创建一个student01实例,如果想让初始化创建student02实例和student01实例相同,你可能会这样做:Student student02 = student01,直接赋值。这样做是有问题的,student01这个对象实例放在Java堆中,如果你直接赋值,Java堆中并没有创建一个新的实例对象student02,而是让s...原创 2019-04-13 18:21:18 · 188 阅读 · 0 评论 -
Java 枚举(enum)的7种常见用法
原文地址:http://blog.lichengwu.cn/java/2011/09/26/the-usage-of-enum-in-java/本文在原文的基础上进行了测试,添加了如何调用的代码(main方法)。目录用法一:常量用法二:switch用法三:向枚举中添加新方法用法四:覆盖枚举的方法用法五:实现接口用法六:使用接口组织枚举用法七:关于枚举集合的使用...转载 2019-04-25 16:43:36 · 244 阅读 · 0 评论 -
Java 接口学习总结
1.概述接口( interface) 技术, 主要用来描述类具有什么功能,而并不给出每个功能的具体实现。接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。接口的特点:(1)一个类可以实现( implement) 一个或多个接口。Java中每个类只能扩展于一个类。(2)接口不是类,尤其不能使用 new 运算符实例化一个接口,却能声明接口的变量。(...原创 2019-05-01 14:15:12 · 2144 阅读 · 0 评论 -
Java线程池的学习
线程池有如下四个优点:降低资源消耗:重用已经创建的线程,线程的创建和销毁需要消耗计算机资源,特别是在有大量创建线程请求且线程的处理过程是轻量级的,例如:大多数的服务器。 提高响应速度:重用已经创建的线程。 提高线程的稳定性:可创建的线程数量是由有限制的,限制值是有多个因素制约,例如:JVM启动参数,Thread构造参数的请求栈大小,底层操作系统对线程的限制。“ 为每一个任务分配一个线...原创 2019-05-31 22:48:13 · 321 阅读 · 1 评论 -
Java中的可重入锁
原文地址:http://ifeve.com/java_lock_see4/ 转载自 :并发编程网 – ifeve.com本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock 和synchronized...转载 2019-05-28 13:01:29 · 6022 阅读 · 1 评论 -
Java 中 ThreadLocal 的使用
原文地址:ifeve.com/threadlocal使用/#more-21292转载自 :并发编程网 – ifeve.com1. 引言ThreadLocal的官方API解释为:“该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其get或set方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。Threa...转载 2019-05-26 16:31:43 · 258 阅读 · 0 评论 -
Java线程间协作的两种方式:wait、notify、notifyAll和Condition
原文地址:https://www.cnblogs.com/dolphin0520/p/3920385.html在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队...转载 2019-05-26 14:18:36 · 291 阅读 · 0 评论 -
在 Ubuntu 中编译运行第一个 c++ 程序
1.创建可执行的源文件已有可执行的源文件可以跳过这一小节,创建源文件可以根据自己的喜欢选择,这里使用vim。 vim helloWorld.cpp创建一个helloworld.cpp 文件并对其进行编辑。一个简单的程序,输入a、b,输出a+b。输入以上内容后,按 esc键,再输入:wq进行保存。查看源文件。 cat helloWorld.cpp...原创 2019-05-17 11:00:42 · 8127 阅读 · 0 评论 -
Java工程师成神之路(2019正式版)
原文地址:https://hollis.blog.csdn.net/article/details/87686522 原作者:Hollis在csdn主要版本 更新时间 备注v1.0 2015-08-01 首次发布v1.1 2018-03-12 增加新技术知识、完善知识体系v2.0 2019-02-19 结构调整,更适合从入门到精通;...转载 2019-05-20 23:40:19 · 504 阅读 · 0 评论 -
Java中的static关键字
原文地址:https://www.cnblogs.com/dolphin0520/p/10651845.html,原作者:Matrix海子 再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:《Java中的static关键字解析》。...转载 2019-05-14 21:33:31 · 524 阅读 · 0 评论 -
Java 的 final 关键字
final关键字可以用于修饰类、方法、变量。修饰类 , 类不可以被继承。 修饰方法,方法不可以被重写。 修饰变量:变量为基础数据类型,这个变量一旦被初始化之后就不能在改变。 变量为引用数据类型,这个引用的地址不可以被修改,引用指向的对象的内容还可以修改。1.修饰类final 修饰类 , 类不可以被继承,测试代码如下所示:MyFinalStudy...原创 2019-05-09 23:15:49 · 308 阅读 · 0 评论 -
Java 面向对象的三个特性和五个基本原则
面向对象(OOP)的三个特性: 封装性(Encapsulation),继承性和多态性。面向对象(OOP)的五个原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)。1.面向对象的三个特性面向对象的三个特性: 封装性(Encapsulation),继承性和多态性。1.1封装性封装性:将数据和对数据...原创 2019-03-23 11:08:47 · 8071 阅读 · 0 评论