自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 资源 (1)
  • 收藏
  • 关注

原创 Netty 实战:如何编写一个麻小俱全的 web 容器

学习 Netty 也有一段时间了,为了更好的掌握 Netty,我手动造了轮子,一个基于 Netty 的 web 容器:redant,中文叫红火蚁。创建这个项目的目的主要是学习使用 Netty,俗话说不要轻易的造轮子,但是通过造轮子我们可以学到很多优秀开源框架的设计思路,编写优美的代码,更好的提升自己。PS:项目地址:https://github.com/all4you/redant快速启动Redant 是一个基于 Netty 的 Web 容器,类似 Tomcat 和 WebLogic...

2019-10-24 11:06:01 438

原创 Java-ClassLoader详解

一、ClassLoader概念 ClassLoader是用来动态的加载class文件到虚拟机中,并转换成java.lang.class类的一个实例,每个这样的实例用来表示一个java类,我们可以根据Class的实例得到该类的信息,并通过实例的newInstance()方法创建出该类的一个对象,除此之外,ClassLoader还负责加载Java应用所需的资源,如图像文件和配置文件等。 ...

2019-07-31 16:20:36 465

原创 从0学Netty第一篇 - 五大Linux网络IO模型简介

点击上方“毕来生”,选择“设为星标”技术好文定时推送!作者:毕来生微信:878799579前言很多开源框架都是基于Netty去衍生的,如能很好的理解Netty的运作原理,我们对开源框架的源码可以更轻松的掌握以及上手。故写此系列文章。希望本文中的内容可以对你有帮助,如有遇到描述/画图不正确,请参考上方联系方式联系。会第一时间进行更正。术语科普1、同...

2019-07-26 16:39:36 253

原创 【Nacos系列第三篇】- Nacos之Spring Boot Config

作者:毕来生微信:878799579前言​ 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家指正。谢谢。​ 因公众号排...

2019-01-15 18:52:22 692

原创 【Nacos系列第二篇】-Nacos之Spring Boot Discovery

作者:毕来生微信:878799579前言​ 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家指正。谢谢。​ 因公众号排...

2019-01-14 15:49:09 886

原创 【Nacos系列第一篇】-Nacos之Spring Discovery 以及Config

【Nacos系列第一篇】-Nacos之Spring Discovery前言​ 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家...

2019-01-13 20:43:52 1115

原创 【JUC系列第五篇】-ReentrantLock锁原理解读

作者 : 毕来生微信: 878799579锁状态转换Lock分类​ Jdk1.5以后帮助我们提供了线程同步机制,通过显示定义同步锁来实现对象之间的同步。还是Doug Lea这个家伙写的。相信读过源码的人在很多地方都可以看到这个家伙。​ Lock可以显示的进行加锁,解锁。但是每次只能有一个线程对Lock对象加锁​ Lock实现结构如下图所示:​ 按照使用的常用度,分别标注了(1...

2019-01-03 22:29:15 295

原创 【JUC系列第四篇】-CountDownLatch使用场景分析

作者 : 毕来生微信: 878799579前言​ 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器 的性能。今天我们来聊一聊CountDownLatch 的使用场景。看看它到底是怎么玩耍的。CountDownLatch 是干什么的?​ CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作 之前,它允许一个或多个线程一直...

2019-01-03 22:26:19 318

原创 【JUC系列第三篇】-CAS算法详解

作者 : 毕来生微信: 8787995791、CAS是什么?CAS是英文单词(Compare-And-Swap)的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。Cas乐观锁算法演示...

2019-01-02 20:00:56 333

原创 【JUC系列第二篇】-原子变量

作者:毕来生微信:8787995791、什么是原子变量?​ 原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题。2、通过synchronized保证原子操作获取锁对象获取失败/获取不到 ->阻塞队列等待释放锁对象3、Atomic之AtomicInteger源码分析java.util.concurrent.atomi...

2019-01-02 19:58:54 235

原创 【JUC系列第一篇】-Volatile关键字及内存可见性

作者:毕来生微信:878799579什么是JUC?JUC全称 java.util.concurrent 是在并发编程中很常用的实用工具类2.Volatile关键字1、如果一个变量被volatile关键字修饰,那么这个变量对所有线程都是可见的。2、如果某条线程修改了被Volatile修饰的这个变量值,修改后的值对于其他线程来时是立即可见的。3、并不是经过Volatile...

2019-01-02 19:56:10 230

原创 JVM系列-001-JVM监控工具

JVM系列-001-JVM监控工具在我们安装的jdk里面的bin目录下有一个jconsole.exe程序。这就是一个JVM的监控工具。我们可以直接打开它,如果配置了环境变量,也可以在命令中直接输入jconsole命令来打开它在控制台输入jconsole,当我们打开jconsole之后,界面如下:本地进程中列出了本地所有运行的java进程(使用jps命令可以查看到当前所有的java...

2018-10-23 07:06:02 248

原创 Java8-CompletableFuture

import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;public class CompletableFuture1 { public static void main(String[] args) throws ExecutionException, Inte

2017-12-16 11:04:39 331

原创 Java8-ConcurrentUtils

import java.util.concurrent.ExecutorService;import java.util.concurrent.TimeUnit;public class ConcurrentUtils { public static void stop(ExecutorService executor) { try { executo

2017-12-16 11:03:55 356

原创 Java8-LongAccumulator

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.LongAccumulator;import java.util.function.LongBinaryOperator;import java.util.st

2017-12-16 11:03:19 538

原创 Java8-Atomic

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream;public class Atomic1 { private

2017-12-16 10:59:41 320

原创 Java8-ConcurrentHashMap

import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ForkJoinPool;public class ConcurrentHashMap1 { public static void main(String[] args) { System.out.println("Paralle

2017-12-16 10:59:18 307

原创 Java8-Synchronized-No.02

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.stream.IntStream;public class Synchronized2 { private static final int NUM_INCREMENTS = 10000;

2017-12-16 10:58:24 253

原创 Java8-Synchronized-No.01

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.stream.IntStream;public class Synchronized1 { private static final int NUM_INCREMENTS = 10000;

2017-12-16 10:57:42 339

原创 Java8-Executors-No.03

import java.util.Arrays;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concu

2017-12-16 08:01:56 269

原创 Java8-Executors-No.02

import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeU

2017-12-16 07:58:23 220

原创 Java8-Executors-No.01

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class Executors1 { public static void main(String[] args) { te

2017-12-16 07:57:35 287

原创 Java8-Optional-No.02

import java.util.Optional;import java.util.function.Supplier;public class Optional2 { static class Outer { Nested nested = new Nested(); public Nested getNested() { retur

2017-12-14 09:31:51 277

原创 Java8-Optional-No.01

import java.util.Optional;public class Optional1 { public static void main(String[] args) { Optional<String> optional = Optional.of("bam"); optional.isPresent(); // true

2017-12-14 09:31:09 238

原创 Java8-Concurrency

import java.util.UUID;import java.util.concurrent.ConcurrentHashMap;public class Concurrency1 { public static void main(String[] args) { ConcurrentHashMap<Integer, UUID> concurrentHashMap =

2017-12-14 09:28:59 324

原创 Java8-Annotations

import java.lang.annotation.ElementType;import java.lang.annotation.Repeatable;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;p

2017-12-14 09:28:18 305

原创 Java8-Lambda-No.05

import java.util.HashMap;import java.util.function.BiConsumer;public class Lambda5 { //Pre-Defined Functional Interfaces public static void main(String... args) { //BiConsumer Example

2017-12-14 09:27:23 241

原创 Java8-Lambda-No.04

public class Lambda4 { static int outerStaticNum; int outerNum; void testScopes() { int num = 1; Lambda2.Converter<Integer, String> stringConverter = (from) -> S

2017-12-14 09:26:52 263

原创 Java8-Lambda-No.03

import java.util.Comparator;import java.util.Objects;import java.util.UUID;import java.util.concurrent.Callable;import java.util.function.Consumer;import java.util.function.Function;import java.u

2017-12-14 09:26:27 256

原创 Java8-Lambda-No.02

public class Lambda2 { @FunctionalInterface public static interface Converter<F, T> { T convert(F from); } static class Something { String startsWith(String s) {

2017-12-14 09:26:00 255

原创 Java8-Lambda-No.01

import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Optional;public class Lambda1 { public static void main(String[] args) {

2017-12-14 09:25:25 306

原创 Java8-Thread-No.01

import java.util.concurrent.TimeUnit;public class Threads1 { public static void main(String[] args) { test1();// test2();// test3(); } private static void test3() {

2017-12-13 09:05:14 449

原创 Java8-Lock-No.06

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock6 { private static int count = 0; public static

2017-12-13 09:04:40 164

原创 Java8-Lock-No.05

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock5 { public static void main(String[] args) {

2017-12-13 09:04:19 177

原创 Java8-Lock-No.04

import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock4 {

2017-12-13 09:03:52 118

原创 Java8-Lock-No.03

import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReadWriteLock;import java.util.con

2017-12-13 09:03:24 158

原创 Java8-Lock-No.02

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReentrantLock;public class Lock2 { public static void main(String[] args) {

2017-12-13 09:03:02 187

原创 Java8-Lock-No.01

package com.winterbe.java8.samples.concurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReentrantLock;import java.util.strea

2017-12-13 09:02:34 171

原创 Java8-Stream-No.13

package com.winterbe.java8.samples.stream;import java.security.SecureRandom;import java.util.Arrays;import java.util.stream.IntStream;public class Streams13 { public static void main(String[] args

2017-12-13 08:58:00 183

原创 Java8-Stream-No.12

package com.winterbe.java8.samples.stream;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.UUID;import java.util.concurrent.ForkJoinPool;import java.util.c

2017-12-13 08:57:43 183

Python之Selenium 所需chromdriver2.3和chrom59版本浏览器安装包

Python之Selenium 所需chromdriver2.3和chrom59版本浏览器安装包

2017-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除