自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

其实我也没有太多期盼,毕竟一生太短,少有圆满

记住今天,以后做更好的自己 17 April 2017

原创 JavaCore -- ThreadLocal

定义:提供线程局部变量,一个线程局部变量在多个线程中,分别有独立的值(副本)特点:简单(开箱即用),快速(无额外开销),安全(线程安全)场景:多线程场景(资源持有,线程一致性,并发计算,线程安全等场景)实现原理:哈希表实现几乎所有提供多线程特征的语言构造函数:ThreadLocal<T>()初始化:initialValue()访问器:get/set回收:remove代码举例public class Basic{ public static Thre

2020-06-22 22:23:02 23

原创 如何 给自己 技术评级

P4P5 初中级 ,了解基本概念,原理(在别人做好的基础上开发)P6 高级,应对不同场景,正确使用,结果可预期(了解每种数据结构的正确使用姿势,以及为什么要用)P7 专家,深度掌握原理,本质,可改进,可定制(为什么要有某种数据结构,以及这种数据结构为什么要有这样的内部实现)重视本质才是成为专家的必经之路...

2020-06-22 21:52:21 46

原创 nginx - 学习脑图

高性能的静态web服务器反向代理(负载均衡)nginx 为什么适应高并发:一个进程处理多个请求非阻塞式的对请求结果缓存优势特点:高并发,高性能扩展性好异步非租塞的事件驱动模型高可靠性热部署,平滑升级进行nginx 二次开发,尽可能减少修改 masterprocess,而是修改第三方模块,行业规定也是不开发masterProcessmaterProcess 不真正处理用户请求,而是进行管理 和监控,如下第三方模块子模块down掉了,masterprocess,会重启一个子模块.

2020-05-24 10:13:33 152

原创 JaveCore--Array

Java 数组就是一个对象,一个比较特殊的对象:public class Test { public static void main(String[] args) { int[] array = new int[10]; System.out.println("array的父类是:" + array.getClass().getSuperclass())...

2019-12-10 10:44:43 18

原创 JavaCore-- Exception理解

为什么要是用Excaption(Think in Java):如果不使用异常,那么就必须检查特定的错误,并在程序中的许多地方去处理它,而如果使用异常,那就不必在方法调用处进行检查,因为异常机制将保证能够捕获这个错误,并且,只需在一个地方处理错误,即所谓的异常处理程序中。这种方式不仅节约代码,而且把“概述在正常执行过程中做什么事”的代码和“出了问题怎么办”的代码相分离。总之,与以前的错误处理方法相...

2019-12-08 16:11:04 33

原创 JavaCore--理解final

final 数据:有时候数据恒定不变是很有用的,它能够减轻系统运行时的负担,对于这些恒定不变的数据我们叫做“常量”。常量主要引用与以下两个地方:1 编译器常量,永远不可改变2 运行期初始化,我们希望它不会被改变编译器常量,它在类加载过程中就已经完成了初始化,所以当类加载完成后是不可更改的,编译期间可以将它代入到任何用到它的计算式中,对于编译期常量,只能使用基本类型,而且必须要在定义时进行初...

2019-12-08 15:39:55 26

原创 JavaCore--equals()

equals 方法在非空对象引用上实现相等关系:1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) ...

2019-12-08 15:18:54 22

原创 JavaCore--代码块

普通代码块public class Test { { //// }}静态代码块public class Test { static{ System.out.println("静态代码块"); }}同步代码块使用 synchronized 关键字修饰,并使用“{}”括起来的代码片段,它表示同一时间只能有一个线程进入到该方法块中,是...

2019-12-08 11:51:22 28

原创 JavaCore--强制类型转换

当我们用一个类型的构造器构造一个对象时候,这个对象的类型就已经确定了也就是说它的本质是不会再发生变化了。Father father = new Son();son对象实例被向上转型为father了,但是这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力被虚弱了而已。Son son = (Son)father;这条语句是可行的,其实father引用任然是Father类型的...

2019-12-08 11:31:10 24

原创 JavaCore--内部匿名类

简单理解:new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }内部匿名类,必须要继承一个父类or实现一个接口当然也仅仅只能继承一个父类or实现一个接口同时它也是没有class关键字,它必须实现它的抽象父类or接口里面所有的抽象方法它仅能被使用一次,创建匿名内部类时,它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部...

2019-12-08 10:41:54 20

原创 JavaCore--static

Java 并不存在全局变量的概念,但是可以通过static来实现一个‘’伪全局‘’的概念static 变量:是随着类加载时被完成初始化的,它在内存中仅有一个,JVM也只会为它分配一次内存static方法:在类加载的时候就存在了,不能是abstract方法static代码块静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于类的任何地方总结:只要是static修饰,就是在...

2019-12-01 19:58:42 19

原创 JavaCore--序列化

Cloneable接口,实现该接口的类都会具备拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。拷贝分为浅拷贝 &深拷贝,浅拷贝存在对象属性拷贝不彻底问题浅拷贝问题: public class Person implements Cloneable{ /** 姓名 **/ priv...

2019-12-01 18:48:48 12

原创 JavaCore--四舍五入

简单举例(银行家算法)public static void main(String[] args) { BigDecimal d = new BigDecimal(100000); //存款 BigDecimal r = new BigDecimal(0.001875*3); //利息 BigDecimal i = d.multipl...

2019-12-01 18:13:09 27

原创 Https理解

对称加密对称加密算法的加密和解密都是用同一个密钥  这样内容是可以加密传输了,但是上图中第一步协商密钥的过程又同样存在安全的问题!万一小王截获了协商密钥的数据,那后续加密传输的数据对小王来说无异于未加密!所以,对称加密存在密钥协商的问题!非对称加密非对称加密算法需要一组密钥对,分别是公钥和私钥,这两个密钥是成对出现的。公钥加密的内容需要用私钥解密,私钥加密的内容需要用公钥解密!私钥由服...

2019-11-17 17:45:40 23

原创 Kafka

1 什么消息系统消息系统负责将数据从一个应用程序传输到另一个应用程序它使得应用程序可以关注于数据,但不担心如何共享它。分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。有两种类型的消息模式可用,一种是点对点,另一种是发布-订阅(pub-sub)消息系统。点对点消息系统:在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特...

2019-11-17 15:35:00 37

原创 重构-改善既有代码的设计

1 Add Parameter(添加参数)为此函数添加一个对象参数,让该对象带进函数所需要的信息注意:检查函数签名是否被超类or子类实现过,如果是,则需要针对每份实现分别进行下列步骤声明一个新函数,名称与原函数相同,只是加上新添加的参数,将就函数的代码复制到新函数中修改就函数,令它调用新函数删除旧函数,如果旧函数是该类public接口的一部分,你可能无法安全的删除它,这种情况下,将它保...

2019-10-28 13:28:37 36

原创 创建or销毁对象

用静态工厂方法代替构造器优势:1 它们有名称2 不必在每次调用他们的时候都创建一个新对象3 可以返回类型的任何子类型的对象4 所返回的对象的类可以随着每次调用儿发生变化,这取决于静态工厂方法的参数值5 方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在劣势:1 类如果不含公有的or受保护的构造器,就不能被子类化2 程序员很难发现他们常用名称fromofva...

2019-10-20 16:11:01 21

原创 MicroService--幂等性设计

什么是幂等性?幂等性就是同样的参数,重复请求相同的服务,必须得到相同的结果。幂等性设计举一个支付的场景,请求一个第三方支付接口发起支付功能,同样的订单号,同样的金额信息,返回的都是成功。同样的订单号,不用的金额今夕,返回的是订单号重复。这个就是幂等性的设计第三方支付校验了请求参数和已有数据库的信息一致时直接返回已有的成功数据,如果数据不一致而又订单号重复直接报订单号除服。而如果不做...

2019-07-01 20:07:02 28

原创 Redis分片

1分片何用Redis的分片承担着两个主要目标:1 允许使用很多电脑的内存总和来支持更大的数据库。没有分片,就被局限于单机能支持的内存容量。2允许伸缩计算能力到多核or多服务器,伸缩网络带宽到多服务器or多网络适配器2分片基础有很多不同的分片标准(criteria)最简单的执行分片方式之一就是范围分片(range partitioning),通过映射对象的范围到指定的Redis实例来完成...

2019-06-28 17:46:49 369

原创 Redis--缓存相关问题

缓存雪崩:当缓存处于单点情况下,一旦缓存服务器崩溃,所有的请求就会落到数据库层,此时,如果由于访问量过大则会导致数据库宕机,进而导致整个网站or服务不可用,这种缓存故障就是俗称的缓存雪崩。解决方案:解决缓存雪崩故障,就得解决单点登录问题,提高缓存高可用性,建立分布式的高可用缓存系统,一台缓存服务器挂了,另外的一台起来继续工作,更不能影响其他的缓存系统。缓存穿透:如果某个key对应的数据不...

2019-06-28 16:05:42 29

原创 Redis --为什么设计成单线程

CPU在切换线程的时候,有一个上下问切换事件,而这个切换时间是非常耗时的一个CPU主频是2.6GHz,这意味着每秒可以执行:2.6*10^9 个指令, 那么每个指令的时间大概是0.38ns!而一次上线文切换,将近需要耗时2000ns!而这个时间内,CPU什么都干不了,只是做了保存上下文的动作。为什么一般是在I/O操作的时候,要用多线程呢?因为I/O操作一般可以分为两个阶段,即等待I/O准备就...

2019-06-19 13:47:00 177

原创 Redis--Command

RedisFlushdb:用于清空当前数据库汇总的所有keyFlushall命令用于清空整个Redis服务器的数据(删除所有数据库的所有key)Keys命令用于查找所有符合给定模式pattern的keySmembers 命令返回集合中的所有成员,不存在的集合Key被视为空集合HGETALL 返回哈希表key中,所有的域和值...

2019-06-19 09:39:42 560

原创 MySQL-B,B-,B+

MySql中,主要有四种类型的索引,分别是B-Tree索引,Hash索引,FullText索引和R-Tree索引。一般来说,MySQL中的B-Tree索引的物理文件大多都是以Balance Tree的结构来存储的也就是所有实际需要的数据都存放于Tree的Leaf Node(叶子节点),而且到任何一个LeafNode的最短路径的长度都是完全相同的。B+Tree在B-Tree数据结构的基础上做了...

2019-06-14 16:20:24 1195

原创 Java How to Read Raw Code

阅读Spring源码的时候,要对设计模式,IOC,AOP,Java动态代理等知识点有所了解平时除了阅读和项目相关的书籍之外,还会阅读一些IT行业相关的书籍平时会经常逛逛GitHub,找一些开源项目看看阅读基础框架,J2EE规范,源码。从一年左右的Java开发经验,就有读源码的技术基础了1 建议从JDK源码开始读起来JDK工具包,List接口和ArrayList、LinkedList实现...

2019-06-14 11:45:33 74

原创 JavaCore-DynamicProxy

在运行时动态对某些东西代理,代理它做了其他事情。public interface Developer{ void code(); void debug();}public class JavaDeveloper implements Developer{ private String name; JavaDeveloper(String name){ this.name = n...

2019-06-14 11:09:12 36

原创 ElasticSearch多集群构架实战

单集群构架瓶颈:单集群构架,写入和查询分别通过Sink服务和Gateway服务管控起来。Sink服务:所有的写入ElasticSearch的数据都是经由Kafka消费入到ElasticSearch。Kafka业务数据包括 log数据,Binlog数据和业务自主上报数据,Sink服务将这些数据实时消费入到ElasticSearchSink服务设计是想对写入ElasticSearch集群进...

2019-06-13 18:00:40 335

原创 JavaCore-ClassLoader

ClassLoad 简介ClassLoader 对象是一个java.lang.ClassLoader的实例。每个Class对象都被这些ClassLoad对象加载通过继承java.lang.ClassLoader可以扩展出自定义ClassLoader,并使用这些自定义的ClassLoader对类进行加载public abstract class ClassLoader { public Cl...

2019-05-30 16:13:21 62

原创 如何在工作中做好技术,工作积累,以及如何展开工作

原则:贵在坚持:学而时习之,知识变化快,但是基础理论变换非常缓慢,对于那些非常基础的理论知识,需要经常复习重视实践:纸上得来终觉浅,绝知此事要躬行重视交流:需要从别人身上学习。从老师、领导、同事、下属甚至对手身上学习,是快速成长的重要手段充实总结和输出:因为实践中会掌握大量细节,要深刻的总结和思考,接受别人的检验是高层次的总结重视规划:长期规划:一定高瞻远瞩,定方向,做有积累的事情,原...

2019-05-25 14:23:50 161

原创 JavaConcurrency-CountDownLatch,CyclicBarrier,Semaphorea

总结:CountDownLatch和CyclicBarrier能够实现线程之间的等待。CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行。不可重用。CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程在同时执行。可重用。Semaphore和锁类似,一般用于对资源的访问权限控制。CountDownLatch 用法:利用它可以实...

2019-04-15 09:50:37 65

原创 Maven-深入理解

Maven仓库的理解,以及他们关系:Jar包,不可能每次都要去联网下载吧,1 本地仓储就是相当于加了一层Jar包缓存,先到这里来查,如果这里查不到,2 就回去私服上找,如果私服也找不到,3 就会去中央库去找,4 找到jar后,会把jar信息同步到私服和本地仓库中如何理解私服:就是公司内部局域网的一台服务器,私服中存储了本公司的内部专用Jar,还充当了中央仓库的镜像,相当于一个代理!...

2019-04-12 09:53:58 31

原创 MachineLearning-Abstract

ReferenceBasicConcept:在计算机系统中 “经验” 通常以“数据”形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”的算法,简称“学习算法”。数据集: 一组记录示例or样本: 数据集里面的一条记录属性or特征: 反应事件or对象在某方面的变现or性质的事项属性值:属性上的取值属性空间or样本空间or输入空间:属性张成的空间特征向量: ...

2019-04-10 09:40:05 49

原创 JavaConcurrency--Executor

线程池:构建一个新的线程是有一定代价的,因为涉及与操作系统的交互。如果程序中创建了大量的声明周期很短的线程,应该使用线程池。一个线程池中包含了许多准备运行的空闲线程。线程池的种类:newCachedThreadPool//必要时创建线程,空闲线程会被保持60秒neFixiedThreadPool//该池包含固定数量的线程:空闲线程会一直被保留newSingleThreadExecuto...

2019-04-07 20:22:52 67

原创 JavaConcurrency--并行数组操作

Java8 中 Arrays类提供了大量的并行化操作,静态Arrays.parallelSort方法可以对一个基本类型值or对象的数组排序。parallelSort方法:Arrays.parallelSort(words);//Arrays.parallelSort(words,Comparator.comparing(String::length)); //传入一个比较器对Arrays进行...

2019-04-07 15:19:31 80 1

原创 JavaConcurrency-CopyOnWrite容器

CopyOnWriteArrayList 和 CopyOnWriteArraySet 是线程安全安全的集合CopyOnWrite容器即写时赋值的容器,通俗理解就是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。优点:这样的好处是我们可以对CopyOnWrite容器进行...

2019-04-07 14:36:51 31

原创 JavaConcurrency-如何理解线程安全的集合CurrentHashMap为例

如果多线程要并发修改一个数据结构例如: 散列表,很容易会破坏这个数据结构,例如:一个线程可能要开始向表中插入一个新元素,假定在调整散列表各个桶之间的链接关系的过程中,被剥夺了控制权。如果另一个线程也开始比那里同一个链表,可能使用无效的链接并造成混乱,会爆出异常or陷入死循环。可以选择锁来保护共享数据结构,但是选择线程安全的实现作为替代可能更容易高效的映射,集合和队列:java.ut...

2019-04-06 19:59:16 174

原创 JavaConcurrency-Blocking queue(阻塞队列)

在开发设计多城中,应该尽量避免Java并发程序设计基础的底层构建块。使用有并发处理的专业人士实现的较高层次的结构要方便安全的多。许多多线程的问题,可以通过使用一个or多个队列以优雅且安全的当时将其形式化生产者线程向队列插入元素,消费者线程则取出他们。使用队列,可以安全地从一个线程向另一个线程传递数据。举列:考虑银行转账程序,转账线程将转账指令对象插入一个队列中,而不是直接访问银行对象。另...

2019-04-06 16:16:43 35

原创 JavaConcurrency- Synchronization(同步)

竞争条件(race condition)在大多数实际的多线程应用中,两个or两个以上的线程需要共享对同一数据的存取。如果两个线程存取相同的对象,并且每一个线程都调用了一个修改该对象的方法,线程之间彼此踩了对方的脚,根据各县城访问数据的次序,可能会产生错误的对象。这种情况就是竞争条件(race condition)account[to]+=account;问题在于这不是原子操作。该指令可能被...

2019-04-06 14:01:53 69

原创 JavaConcurrency-DaemonThread

守护线程可以通过调用如下方法,把线程转变为守护线程(daemon thread)void setDaemon(boolean isDasemon) //标识该线程为守护线程or用户线程。这一方法必须在线程启动之前调用守护线程的唯一作用就是为其他线程提供服务。计时线程就是一个例子,它定时发送信号给其他线程or清空过时的告诉缓存项的线程。当只剩下守护线程时,虚拟机就退出了,由于如果只剩下守...

2019-04-03 11:34:16 27

原创 JavaConcurrency-BasicConcept

1 什么事线程多线程程序在较低的层次上扩展了多任务的概念:一个程序同事执行多个任务。每一个任务称为一个线程(thread)每个进程拥有自己的一整套变量,而线程则共享数据。2 Thread.currentThread 方法获取当前线程,(线程更多操作看 https://blog.csdn.net/u010122604/article/details/87560953)3 线程状态: 总共有6...

2019-04-03 11:28:16 31

原创 高度自律绝对自由,你天加练的全战功城狮梦

First Get the Money!Then Get the Power!Respect!一直徘徊在各种中小公司里开发一些没技术难度的Java系统,主要就是CRUD。哪怕是用了用MQ、缓存、分库分表,但是也没什么并发量,数据量也不算特别大,自己的技术成长极为缓慢。然后就是三五年,七八年,甚至十多年,职业发展和技术水平都停滞在这个状态,无法有更进一步的发展随着现在寒冬到来,到处裁员,...

2019-04-01 17:16:34 191

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