自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(195)
  • 收藏
  • 关注

原创 git 深入理解

之前一直是对git的基础命令有了解,最近正好有这个时间和需求,将git命令重新理解了下。git仓库中保留的是你的目录下所有文件的快照。还有提交记录,这个记录很轻量,git会将此次版本与上一次的版本进行对比,将所有的差异打包到一起作为一个提交记录。先说一些简单的之前模糊的概念。1. originorigin:origin可以说是远程仓库的一个指针。 其实就是远程仓库服务器的一个copy。git remote可以列出当前所在分支对应的每一个远程服务器的简写。git remote show orig

2020-05-26 16:10:29 590

原创 git rebase四种常用场景

常见的几个git命令:如果远程已经新建了一个新的分支,但是本地使用git branch -a都查看不到,可以使用 git remote update origin --prune来更新一下即可。当远程新建了一个分支之后,本地可以使用以下命令track此分支,并在本地建立对应分支。git checkout --track origin/newRemoteBranch版本回退:Git reset --hard idGit reset --soft id注意 这个回退只是本地的回

2020-05-19 19:38:02 805

原创 Redis的三种模式 笔记记录

https://cloud.tencent.com/developer/news/8009,可以看一下这两篇文章https://blog.csdn.net/ahfywangqiang/article/details/86537421之前有看过一些Redis模式相关文章,今天又看了上面两篇。这里总结一下笔记。学习之用。主从模式下,一主多从的话,主挂了,本Redis服务就不能写,只能读(从服务...

2019-06-05 11:30:16 614

转载 生产者和消费者代码实现java

https://www.cnblogs.com/chentingk/p/6497107.html

2019-05-02 16:25:52 432

转载 数据结构之红黑树

其实红黑树就是一种自平衡的二叉搜索树,因为如果插入的数据时有序的时候,二叉树会变成链表,插入删除的效率非常的低。规则当插入(删除)一个节点时,必须遵循一定的规则,他们被称为红黑规则。遵循红黑规则,树就是平衡的:每一个节点不是黑就是红;根节点总是黑色的;红节点的子节点必须是黑色的(红色节点不能连续),反之则不一定成立;从根节点到叶子节点or空子节点的每条路径 上的黑色节点数目(黑色高...

2019-05-02 16:20:15 214

转载 select epoll poll的区别

(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll...

2019-05-02 11:33:01 484

转载 各个MQ消息队列介绍以及区别比较(RabbitMq ActiveMQ、ZeroMQ、Kafka)

首先,MQ其实就是消息队列,队列我们可以理解为管道,以管道的放手做消息传递。1. RabbitMQ,ActiveMq,ZeroMq比较TPS比较:ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。持久化消息:ZeroMQ不支持。ActiveMQ和RabbitMQ都支持。技术点:可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统...

2019-05-02 09:51:49 4326

转载 Redis和memcache的区别(Redis相关、Redis的String中key和value的最大值是512M)

Redis的String中key和value的最大值(512M)Redis的特点速度快;因为数据存在内存中。类似于HashMap,HashMap的优势就是查找和操作的速度都是O(1);支持丰富的数据类型:String、list、set、sorted set、hash支持事务,操作都是原子性的;丰富的特性:可用于缓存、消息等,按照Key设置过期时间,过期之后自动删除,有多种过期策略支持...

2019-05-02 09:30:21 969

转载 面试 Redis必看

https://blog.csdn.net/qq_34337272/article/details/80012284

2019-05-02 09:30:07 172

转载 秒杀系统相关-分布式锁解决秒杀超卖的优化and高并发的攻击和解决

这两篇文章很简单易懂,自己看一下就行,所以没有自己写一下。蛮有趣的。分布式锁解决超卖的优化:《用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景?》](https://blog.csdn.net/u010391342/article/details/84372342)高并发情况下出现的问题和如何解决:《Web大规模高并发请求和抢购的解决方案》...

2019-05-02 08:08:09 1119

转载 分布式理论(CAP BASE TCC 2PC 3PC)

分布式数据一致性因为在分布式系统中,为了保证数据的高可用,会将数据保留多个副本(replica),这些副本分布在不同的物理机器上。所以可能导致数据在进行写入副本的过程中出现丢失等故障,造成数据不一致的问题。CAPConsistency 一致性、Availability 可用性、Partition Tolerance 分区容错性Consistency 一致性:这个和数据库ACID的一致性类似...

2019-04-29 10:36:04 1102

转载 幂等的实现方案

我之前有写过关于HTTP的幂等性:《(HTTP的)幂等性Idempotence》但是其实幂等不仅仅只是用于HTTP的设计中,很多重要的情况,这些逻辑都需要幂等的特性来支持。幂等性概念幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使...

2019-04-28 09:09:58 1471

转载 ThreadLocal理论以及其内存泄漏的问题

本人的另一个关于ThreadLocal理论和实践的文章:《ThreadLocal实现线程范围内数据共享》ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。具体原理ThreadLocal里类型的变量,其实是放入了当前Thread里。每个T...

2019-04-28 09:00:04 353

原创 减少GC开销 &&可能出现内存泄漏的情况&&两个对象相互引用会不会被GC

如何降低java GC开销,减少GC次数其他详见:《如何减少垃圾回收的次数 jvm虚拟机》1.选择一个较好的GC器Java9在2017年九月发布,G1(“Garbage First”)垃圾回收器 成为 HotSpot 虚拟机默认的垃圾回收器。从 serial 垃圾回收器到CMS 收集器, JVM 见证了许多 GC 实现,而 G1 将成为其下一代垃圾回收器。随着垃圾收集器的发展,每一代 GC...

2019-04-28 08:38:26 894

转载 java8怎么解决java7中HashMap 多线程扩容发生死链的情况

首先 先仔细看一下关于扩容的问题:http://www.cnblogs.com/wang-meng/p/7582532.html我这里截取文章中的一部分内容:在HashMap的源码中,resize这个函数中调用了transfer(),该方法源码 见下图:单线程扩容:假设:hash算法就是简单的key与length(数组长度)求余。hash表长度为2,如果不扩容, 那么元素key为3,5...

2019-04-28 07:41:16 4405

转载 线程池详解-队列、抛弃策略

**newFixedThreadPool和newSingleThreadExecutor在默认情况下将使用一个无界的队列(LinkedBlockingQueue),**如果所有线程都在执行任务,那么任务将在队列中等待,如果任务到达的速度大于线程执行的速度,造成的后果将是队列无限期增加。更稳妥的管理策略是使用有界队列,如:ArrayBlockingQueue,有界的LinkedBlockingQu...

2019-04-23 10:20:29 3317

转载 HotSpot虚拟对象(对象创建 内存分配 栈上分配 TLAB 对象内存布局和对象访问等 )

对象的创建整个对象的创建过程如下所示:首先进行类加载的检查:虚拟机遇到new指令的时候,首先去检查该指令的参数是否能够在常量池中定位到这个类的符号引用,并且检查该符号引用代表的类是否已经被加载过、解析和初始化过。若没有,必须先执行相应的类加载的过程。分配内存:类加载检查通过之后,虚拟机为对象分配内存。(内存大小在类加载完后就能确定)。分配的方式有“指针碰撞”和“空闲列表”两种,若java...

2019-04-21 18:27:56 1009

转载 Mybatis实现原理

https://yq.aliyun.com/articles/603907

2019-04-21 16:36:05 1195

转载 mybatis中#和$的区别 SQL

在mybatis中的$与#都是在sql中动态的传入参数。eg:select id,name,age from student where name=#{name} 这个name是动态的,可变的。当你传入什么样的值,就会根据你传入的值执行sql语句。两者区别就是将传入的值作为字符串的形式。用#{}传入值,sql动态解析为一个JDBC预编译语句(preparedStatement)的参数标记...

2019-04-21 14:39:09 195

转载 AspectJ 实现代理

《两种动态代理:JDK实现和CGLIB字节码生成文件》《java中的代理(静态代理和动态代理)》先复习一下,看一下之前的两篇文章然后我们说一说AspectJ代理:AspectJ静态编译织入(Aspect for java),他其实是一套独立的面向切面编程的解决方案。Spring中虽然使用了Aspect的Annotation,但是并没有使用它的编译器和织入器。关于AOP的相关概念学习可以看...

2019-04-20 11:21:00 1284

转载 Set怎么去重 HashSet TreeSet LinkedHashSet

首先,Set和List的区别就是Set是无序不可重复的序列HashSet底层是hash表,可以为null,但只能有一个null;TreeSet底层是一个二叉树,保证有序(继承自SortedSet),不能有null。两者都是线程不安全的。LinkedHashSet也是根据元素的hashcode值来决定元素的存储位置。但是它同时使用链表维护元素的次序。Set怎么去重其实Set中的源码很简单...

2019-04-20 10:35:25 518

转载 SpringAOP基础以及四种实现方式

首先。AOP 面向切面编程。就是说通过配置将业务逻辑和系统的服务分离。目的是让业务逻辑之关系业务的处理而不再去处理其他事情。其中切面一般都是哪些可以为多个类提供服务的模块,将其封装起来称为切面。减少系统的重复代码和低模块之间的耦合度。一般用于权限验证、日志、事务等。拦截器也是应用了AOP的思想,将拦截(请求)Action以进行一些预处理或者结果处理。Spring的AOP可以拦截Spring管理...

2019-04-20 10:13:42 1283

转载 复习 Spring面试记录

Spring中配置的bean是在什么时候实例化的?默认容器在加载的时候初始化bean,但是也可以通过设置lazy-init属性来延迟加载。描述一下Spring中的AOP IOC DIIOC:控制反转:利用反射原理将对象创建的权利交给了容器,Spring容器在运行的时候通过反射的原理通过配置文件来动态的创建对象和维护对象之间的关系,实现了松耦合的思想。AOP:面向切面编程。就是说...

2019-04-19 14:44:35 131

原创 java 判断是否是一个快乐数

快乐数的定义:快乐数(happy number)有以下的特性:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。以十进制为例:2 8 → 2²+8²=68 → 6²+8²=100 → 1²+0²+0²=13 2 → 3²+2²=13 → 1²+3²=10 → 1²+0²=13 7 → 3²+7²=58 → 5²+8...

2019-04-19 09:20:27 344

转载 volatile和synchronized的区别(&& java内存模型)

这篇文章是复习,volatile相关详细介绍可以见我的另一篇文章:《Volatile关键字以及java并发和锁的相关知识》java内存模型在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变...

2019-04-18 09:45:22 144

转载 跳表 在java中的实现 ConcurrentSkipListMap

转自:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/Multithread/并发容器总结.md对于一个单链表,即使链表是有序的,如果我们想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。但一个重要...

2019-04-18 09:26:10 264

转载 synchronized原理和ReentrantLock对比

先看一下自己的进行复习:《Synchronized详解(可重入、Monitor原理等)》尽量不要使用 synchronized(String a) 因为JVM中,字符串常量池具有缓冲功能!synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令,其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指...

2019-04-17 10:37:57 486

原创 CAS乐观锁和Synchronize悲观锁的使用场景与选择

《Lock与synchronized 的区别》定义:悲观锁(Pessimistic Lock):每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock):每次获取数据的时候,都不会担心数据被修改,所以每...

2019-04-17 09:20:02 2562 1

原创 mysql中的两段锁协议和三级封锁协议

两段锁协议一个事务中一旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第一阶段加锁,第二阶段解锁。目的 :”引入2PL是为了保证事务的隔离性,保证并发调度的准确性,多个事务在并发的情况下依然是串行的。封锁定理:如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。2PL和2PC**2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。**主要是在My...

2019-04-17 09:14:42 7574

转载 Java 序列化的几种方式 和反序列化

对象–>字节序列:序列化字节序列–>对象 :反序列化序列化的用途:把对象的字节序列保存在磁盘上,通常存放在一个文件中;在网络上传送对象的字节序列。存储在物理磁盘上的:Web服务器中的Session对象。当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内...

2019-04-16 17:19:04 2340

原创 浏览器访问一次网站的全过程(输入url到页面展示)

‘’

2019-04-16 09:42:01 2269

转载 Mysql InnoDB存储引擎中的自适应Hash索引、两次写和插入缓冲

Mysql中的存储引擎:InnoDB有三个关键特性:自适应hash索引、两次写以及插入缓冲。自适应hash索引(自优化 读写速度提升)由来由于innodb不支持hash索引,但是在某些情况下hash索引的效率很高,于是出现了adaptive hash index功能,该功能默认开启,建议关掉,意义不大。可以通过 set global innodb_adaptive_hash_index=of...

2019-04-12 15:51:55 602

转载 并发的优缺点

https://blog.csdn.net/u011521203/article/details/80149669

2019-04-12 14:03:00 2130

转载 如何减少垃圾回收的次数 jvm虚拟机

GC时会Stop the world。会暂停程序的运行,带来延迟的代价。如何减少GC的次数是在开发过程中改善的一个重要环节。1.对象不用的时候显式的置为NULL一般而言,为 Null 的对象都会被作为垃圾处理,所以将不用的对象显式地设为 Null,有利于 GC 收集器判定垃圾,从而提高了 GC 的效率。2.尽量少用 System.gc()此函数建议 JVM进行主 GC,虽然只是建议而...

2019-04-12 11:03:45 1010

转载 接口和抽象类的区别

之前在某一篇总结中写过,但是还是单独 列出来一下子。注意:java8中的接口已经有默认方法的实现和静态方法了。以此来减少抽象类和接口之间的差异。现在,我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。什么时候使用抽象类和接口如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多...

2019-04-09 14:44:55 79

原创 算法相关(待续)

动态规划和贪心算法动态规划的基本要素分析最优子结构设计最优子结构的递推函数求解子问题,对每个子问题只接一次,而后将其解保存在表格中,当再次需要解此子问题时,只是查看一下结果,即重叠子问题。构造最优解:通常采用自底向上的方法贪心算法要素①贪心选择:所求问题的整体最优解可以通过一系列局部最优的选择即贪心选择来达到。②最优子结构性质:指一个问题的最优解包含其子问题的最优解。共同点:...

2019-04-09 09:47:58 97

转载 HTTP详解

注意之前有写关于长连接和短连接的文章。HTTP是一个基于请求与相应模式的、无状态的、应用层的面向对象的协议,常常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接(长连接)的机制,绝大多数的Web开发,都是构建在HTTp协议之上的Web应用。HTTP协议的主要特点HTTP前述HTTP中的请求消息和响应消息都是由:开始行、消息报头、空行、消息正文组成。其中 ,消息报头和消息正文...

2019-04-09 09:42:34 396

转载 JDK和JRE的区别

今天来总结一下JDK和JRE的区别JDK和JREJDK:java开发工具包,包含各种类库和工具。开发时候需要运行程序,自然其中包含了JDK。Java Development Kit在jdk下:jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。说明是有两个虚拟机的。JRE:java运行环境 ,核心就是JVM以及核心类库。Java Runtime En...

2019-04-09 09:04:49 389

原创 IO 之IO流体系和IO中的设计模式(装饰器适配器)

流流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序列或字符序列。从流中取得数据的操作称为提取操作,亦称读操作;而向流中添加数据的操作称为插入操作,亦称写操作。用来进行输入输出操作的流就称为IO流。流的分类流的流向:输入输出流流的数据单位:字符流(Writer、Reader)和字节流(InputStream、OutputStream)流...

2019-04-06 15:52:18 607

转载 如何设计一个秒杀系统

面试的时候有时候会问到秒杀系统如何设计,今天,来总结一下。秒杀系统其实不单纯是一个电商抢购系统,涉及到大并发的场景都适合使用到该套秒杀系统的方案。难点&& 特点特点就是瞬时大并发、库存少、业务流程简单主要是产生大并发请求、产生超卖的现象和性能问题瞬时大并发:抢购场景中系统经常会有10w+的用户同时访问一个商品页面去抢购手机,这就是一个典型的瞬时大并发,如果系统没有经过限...

2019-04-06 12:16:12 1851

空空如也

空空如也

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

TA关注的人

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