自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA中有趣的移位操作

<<, >>, <<<, >>> 这些符号什么意思?有哪些容易被遗漏的细节?上次介绍了JAVA中有趣的位运算,...

2019-09-02 07:55:00 789 1

原创 JAVA中有趣的位运算

&, |, ^, ~ 这些符号什么意思?有什么妙用?一起来感受它们的神奇吧~当我们看一些源码的时候,经常会看到诸如 &、|、^、~ 的符号,这些就是位运算...

2019-08-30 07:55:00 1075

原创 探索JAVA并发 - 并发容器全家福

14个并发容器,你用过几个?不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不安全的类,效率更高。在并发场景下,常会用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻出来...

2019-08-27 11:50:00 135

原创 震惊!程序员伪造资历流水线曝光!

对不起,我是标题党技术积累没有捷径,学习之路各有方法,来交流交流呗。推荐阅读探索JAVA并发 - 终于搞懂了sleep/wait/notify/notifyAll探索JAVA并发 - 如何减少锁的竞争探索JAVA并发 - 悲观锁和乐观锁探索JAVA并发 - 可重入锁和不可重入锁探索JAVA并发 - 线程池详解探索JAVA并发 - 如...

2019-08-23 07:55:19 211

原创 跨域Access-Control-Allow-Origin解决方案

前端访问其它域名的资源往往会失败,那是因为浏览器出于安全考虑禁止了不同源的资源。同源策略同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaSc...

2019-08-17 08:00:00 1060

原创 探索JAVA并发 - 终于搞懂了sleep/wait/notify/notifyAll

sleep/wait/notify/notifyAll分别有什么作用?它们的区别是什么?wait时为什么要放在循环里而不能直接用if?简介首先对几个相关的方法做个简单解释,Object中有几个用于线程同步的方法:wait、notify、notifyAll。public class Object { public final native void wait(long t...

2019-08-16 11:53:00 129 1

原创 探索JAVA并发 - 如何减少锁的竞争

锁的竞争会限制代码的可伸缩性,在并发编程时通过一些手段有意地减少锁竞争,可以让程序有更好的表现。所谓可伸缩性,即当增加计算资源(如CPU、内存、带宽等)时,程序的吞吐量或处理能力会相应增加。这个时候,我们当然希望增加的效果越明显越好,不过如果锁竞争太严重,可伸缩性会大打折扣。缩小锁的范围当某个方法需要操作一个线程不安全的共享资源时,最简单的办法就是给方法加上synchronized...

2019-08-13 11:58:00 434

原创 探索JAVA并发 - 悲观锁和乐观锁

什么是悲观锁,什么是乐观锁,它们是如何实现的?定义 悲观锁:对世界充满不信任,认为一定会发生冲突,因此在使用资源前先将其锁住,具有强烈的独占和排他特性。 乐观锁:相信世界是和谐的,认为接下来的操作不会和别人发生冲突,因此不会上锁,直接进行计算,但在更新时还是会判断下这期间是否有人更新过(该有的谨慎还是不能少),再决定是重新计算还是更新。 悲观锁悲观锁认为一定会有人和...

2019-08-12 13:10:00 71

原创 探索JAVA并发 - 可重入锁和不可重入锁

什么是可重入锁,什么是不可重入锁,它们是如何实现的?定义可重入锁:当线程获取某个锁后,还可以继续获取它,可以递归调用,而不会发生死锁;不可重入锁:与可重入相反,获取锁后不...

2019-08-09 08:00:00 138

原创 在github搭建自己的博客

作为技术人员,谁不曾想过有一个属于自己的网站。但因为种种原因(没时间、没技术、没钱...),往往只是想想。现在,一套完整的解决方案来帮助彷徨的你实现梦想~在下以前也尝试过...

2019-08-05 08:02:00 334

原创 探索JAVA并发 - 线程池详解

线程池是并发编程中必不可少的一种工具,也是面试高频话题。线程池,即管理着若干线程的资源池(字面意思)。相比于为每个任务分配一个线程,在线程池中执行任务优势更多: 线程复用:线程池中的线程是可以复用的,省去了创建、销毁线程的开销,提高了资源利用率(创建、销毁等操作都是要消耗系统资源的)和响应速度(任务提交过来线程已存在就不用等待线程创建了); 合理利用资源:通过调整线程池大小...

2019-08-03 08:07:00 92

原创 在github搭建自己的maven仓库

Maven对Java开发者来说是很常见的工具,有了它只需要在pom文件加几行代码就能引入第三方代码。如果想我们自己写的工具类也让别人通过这种方式使用,不妨借助github...

2019-08-01 23:10:19 623

原创 源码分析 - JVM关闭钩子的注册和调用

通过关闭钩子,我们可以在应用关闭时做一些自定义的操作,让程序更优雅的结束。JAVA程序运行在虚拟机上(JVM),JAVA程序执行完成,JVM也随之关闭。关闭的方式有多种,...

2019-07-30 08:18:00 180

原创 JAVA泛型与类型擦除

泛型的本质是参数化类型,这种参数类型可以用在类、接口和方法的创建中。泛型是在JAVA 1.5版本中才引入的,它能和以前的版本兼容的原因是泛型信息只存在于代码编译阶段,在进...

2019-07-29 08:18:00 108

原创 探索JAVA并发 - 如何处理线程中断

中断是一种协作机制,通过这种机制可以要求指定线程在可以暂停的地方停止当前任务,但这个要求可以无视,我们也经常这么做(虽然不好),那应该这么对待其它线程发来的中断要求呢?在...

2019-07-26 08:02:00 83

原创 探索JAVA并发 - 如何优雅地取消线程任务

通过线程启动一个异步的任务很容易,但想让它提前安全且快速地结束确并不简单。如果线程外部的代码可以提前把目标线程置为“完成”状态,那么这个目标线程就是可取消的。线程任务取消...

2019-07-25 08:02:00 253

原创 探索JAVA并发 - 同步工具类

同步工具类是个笼统的概念,它可以根据自身状态来协调线程的控制流,了解JAVA中常用的同步工具能帮助开发者写出更好的并发代码。闭锁 CountDownLatch闭锁的作用相...

2019-07-24 08:02:00 150

原创 探索JAVA并发 - ThreadLocal

使用ThreadLocal可以维持线程封闭性,使线程中的某个值与保存值的对象关联,防止对可变的单例变量或全局变量进行共享,但使用不当也会造成内存泄漏,先了解它,再使用它。...

2019-07-23 08:08:00 119

原创 面试杂谈 - 死锁的四大条件与处理策略

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,...

2019-07-21 23:52:43 242

原创 JAVA中的String真的不可变吗

String是不可变的吗?是的!真想变?也行~我们都知道,String是不可变对象,即一旦创建,那么就不能改变它的状态。对此,我们来分析一波。String的内部构造小心翼...

2019-07-19 17:20:26 100

原创 面试杂谈 - CPU占用高如何排查

程序里少不了运算,如果不是环境太恶劣,CPU基本是能支撑应用运行的。但如果发现CPU居高不下,就需要思考是否程序有问题。当服务器CPU居高不下,可以从下面几个方面入手定位...

2019-07-18 08:00:00 408

原创 面试杂谈 - 内存泄漏如何排查

JAVA的垃圾回收机制给了程序猿便利,我们可以不需要显式释放资源。但想高枕无忧却是不能,OOM像个隐藏在暗处的幽(hua)灵(nong),威胁着可怜、弱小又漂亮的程序猿。...

2019-07-17 09:00:00 1305

原创 面试杂谈 - 谈谈你对GC的理解

作为一个落魄的JAVA开发,在面试中常被问道:你是什么垃圾?哦不,是你对JAVA的垃圾回收机制有了解吗?接下来就对GC做一个全方位的总结,希望下次可以自信地回答面试官:我...

2019-07-16 09:00:00 777

原创 spring cloud 自定义配置源及配置刷新

通过自定义配置源可以接入自己的配置服务,配合ContextRefresher可以让应用运行中自动更新配置。实现PropertySourceLocator/** * 自...

2019-07-15 20:43:53 284

原创 从0.5到1写个rpc框架 - 4:request filter

为了后续扩展方便,搞个filter支持,就抄一个servlet的filter吧。servlet filter 分析在写mvc项目时,经常会用到filter,可以给一个请求...

2019-07-14 15:17:26 92

原创 从0.5到1写个rpc框架 - 2:远程服务调用(grpc)

微服务要实现远程服务调用,除了直接使用如spring coud全家桶中的ribbon、feign模块,也可以试试其他优秀的框架,如谷歌的gRPC,这里基于它实现自己的服务...

2019-07-14 15:17:26 142

转载 从0.5到1写个rpc框架

本系列主要是借助当前比较流行的开源组件进行二次开发,得到一个可以快速用于业务开发的微服务治理框架。通过实践,提升自己对微服务的理解,以及对spring主要组件的熟悉程度。...

2019-07-14 15:17:26 81

原创 从0.5到1写个rpc框架 - 3:远程服务调用(thrift)

这和上一篇差不多,只是换了种远程调用的框架,有兴趣也可以实现更多种方式,这里只做一种尝试。thrift是Facebook开源的rpc框架,基于TPC,默认使用二进制。需要...

2019-07-14 15:17:26 135

原创 从0.5到1写个rpc框架 - 7:网关支持(gateway)

微服务除了在内部相互调用,有时某些服务也会提供给外部应用。当然不能让外部应用也加入到“大家庭”里,毕竟知人知面不知源码,我们可以派出一个“前台”去接待它们,这就是“网关”...

2019-07-14 15:17:26 635

原创 从0.5到1写个rpc框架 - 1:服务注册/发现(eureka)

首先来实现一个服务注册发现的功能- acuprpc + acuprpc-core //server/client核心处理逻辑 + acuprpc-s...

2019-07-14 15:17:26 105

原创 从0.5到1写个rpc框架 - 5:服务监控和管理(actuator)

微服务一般需要监控实例状态和对其做一些干预,通过spring的endpoint可以实现这个功能。springboot项目中只要引入spring-boot-starter-...

2019-07-14 15:17:26 163

原创 从0.5到1写个rpc框架 - 6:调用异常节点自动重试

eureka client每隔30s向注册中心发送心跳来给自己续命,当注册中心长时间没收到client的信号,就会认为它挂掉了,把它提出群聊。再加上其它服务也按照一定频率...

2019-07-14 15:17:26 115

原创 Facebook远程调用框架thrift入门示例

和谷歌的gRPC类似,Facebook的thrift也是个优秀的远程调用框架,来入个门。安装thriftmacbrew install thrift安装完成检查thrif...

2019-07-13 14:06:55 172

原创 Google远程调用框架gRPC入门示例

远程服务调用是微服务中重要一环,谷歌的gRPC是一个优秀的框架,今天就来学习一下基本用法。新建maven项目pom.xml&lt;dependencies&amp...

2019-07-12 21:34:24 298

原创 从0.5到1写个rpc框架 - 0:前言

这不是教程,只是个人总结,有兴趣的童鞋可以搭配源码看看:acuprpc最近在新公司开始接触微服务,在此之前并没有微服务的开发经验。对比了spring cloud和公司的r...

2019-07-11 22:53:50 68

原创 swustOJ哈弗曼编码(985)

这里先把哈弗曼树创建出来,在进行编码,因为书上那个数组做的代码看得头晕#include<iostream>#include<stdlib.h>#include<limits.h>using namespace std;typedef struct node{char datax;//存字母,若只用下面的data存下标可能和组合后的权值冲突,...

2014-05-18 19:20:42 1208 1

空空如也

空空如也

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

TA关注的人

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