自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(377)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 使用CAS写一个可重入锁

import java.lang.reflect.Constructor;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.locks.LockSupport;import sun.misc.Unsafe;public class MyLock { private static ...

2019-08-29 14:24:32 543

原创 关于数据序列化(3),JSON的方式,FastJson序列化对象和List集合示例

JSON也是对象序列化的一种方式1. 示例public class FriendLikeVO { public String sn; public int score; public long time; public FriendLikeVO(JSONObject jo) { this.sn = jo.getString("sn");

2017-09-15 12:01:17 2485

原创 深入理解TCP(2)TCP的断开一定是四次挥手吗?FIN_WAIT_2和CLOSE_WAIT,TIME_WAIT以及LAST_ACK的细节

答案是否定的 我们回顾下使用wireshark的抓包1. 服务器未开 客户端尝试连接2. 建立连接然后关闭,三次握手3/4次挥手, 3. 建立连接,交互一次然后断开,三次握手3次挥手根据wireshark的包,四会握手的第二步 被动断开的一方收到FIN(第一次握手)后要发送ACK。但是抓的包中有时候会没有这一步。 我们看一下一般的书中TCP四次挥手的图解当被动断开的一方发送ACK的时候,被动断

2017-09-05 23:14:09 17821 5

原创 kafka学习(1)linux下的安装和启动,以及Java示例代码

下载kafka并解压wget http://mirror.bit.edu.cn/apache/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgztar -zxvf kafka_2.11-0.11.0.0.tgz修改配置 (1)配置zookeeper地址 vim /data/kafka_2.11-0.11.0.0/config/server.propertieszooke

2017-08-24 20:00:02 3028

原创 从0开始写一个基于注解的轻量级分布式RPC框架(4)自定义Spring的IOC,自定义属性注入bean的过程

代码已经发布在GIT 源代码 自定义注解@SReference注解@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.FIELD, ElementType.METHOD })public @interface SReference {}如何让这个注解所标注的属性可以被Spring注入相关的bean?方法1

2017-08-19 12:34:34 681

原创 从0开始写一个基于注解的轻量级分布式RPC框架(3)让Spring加载自定义注解

如何让我们自定义的注解可以像 @Service @Controller @Componet等被Spring加载到应用上下文?方法1 自定义注解添加能被Spring识别的注解比如@Component下面的例子增加了@Component于是自定义注解@SService 可以通过它来获取上下文中被@SService注解的bean。@Documented@Retention(RetentionPolicy

2017-08-19 00:33:20 985

原创 从0开始写一个基于注解的轻量级分布式RPC框架(2)框架整体结构

代码已经上传GIT源代码1 整体思路如图 1.1注解因为基于注解的框架,我们理想的情况是只要我们定义了两个注解 @SService和@SReference 只要是被@SService注解的类就可以被IOC容器加载并且将方法发布到注册中心。 只要是被@SReference注解的属性就会被注入代理类。@Documented@Retention(RetentionPolicy.RUNTIME)

2017-08-19 00:06:40 973

原创 从0开始写一个基于注解的轻量级分布式RPC框架(1)RPC原理和准备工作

1.原理RPC(Remote Procedure Call Protocol)远程过程调用,是分布式的基础。具体源码已经上传GIT 基于注解的RPC源码 RPC就是调用远程服务就像调用本地接口一样。 我们先看一下一个简单又经典的RPC示例import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java

2017-08-17 00:13:19 1556

原创 关于数据序列化(4)自定义序列化的实现,支持常用集合框架

除了循环引用的问题,下面的示例很好的揭示了如何实现自定义序列化的方法。稍加改造就可以在项目中应用/** * 分布式序列化接口 * 除了基本类型 其余数据需要分布式传输必须实现本接口 * 注:实现本接口的类必须有无参构造函数! * @see SerializeTool#write(Object, java.io.DataOutputStream) * @see SerializeTool#r

2017-05-05 16:02:47 1321

原创 Spring boot(14) 监控spring boot的运行spring boot actuator和spring boot admin

如何更好的监控spring boot 的状态?加载了哪些bean,有多少个线程在运行?一,spring boot actuator当然你得提前给浏览器比如chrome添加预览json文本的插件,这样查看起来才直观。json预览插件请点击chrome的工具->更多工具->扩展程序。pom.xml <dependency> <groupId>org.spri...

2017-02-22 17:00:01 1758

原创 服务器实时通知客户端方案,服务器发送/推送事件方案(2)server event,典型例子,可以用作股票、新闻信息推送

server event是html5规范的一部分,它相比websocket使用起来更简单,对服务器的改动也最小前端html部分 if(typeof(EventSource)!=="undefined") { var source=new EventSource("doevent"); //打开连接 source.onopen=function(

2016-11-14 15:59:13 4913 4

原创 REDIS 学习(10)流程图解使用redis实现分布式锁

redis作为集中式缓存,可以通过它来实现分布式锁。首先用到的redis操作有:setnx key value: 当key不存在的时候生效并返回1,当已经有此key的时候返回0getset key value: 设置新值返回旧值,如果之前不存在也设置新值并返回nilget key: 返回对应的值,没有则返回nildel key,key1,key2: ...

2016-09-28 17:23:23 2378

原创 REDIS 学习(9) 使用java8写jedis的技巧,经典jedis池,附配置文件的读取

使用jedis灵活可靠,而且用微不足道的序列化消耗提高开发效率。首先看一段try-with-resoure风格的jedis片,这种方式jedis会在cath(Excepiton e)或者try代码结束后调用jedis.close()方法try (Jedis jedis = new Jedis("119.29.111.111", 6379);) { jedis.select(3);// 选

2016-09-23 07:06:22 3853 2

原创 Nginx(6) nginx反向代理配置websocket,以及配置后websocket连接后立即断开的解决方法

用proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";配置nginx使之支持websockt的反响代理后,发现websockt连接上就立即断开了最后查到原因是proxy_read_timeout 太小,这便是websockt的有效时间现在配置成3600,也就是维持一个小时,

2016-08-22 17:36:55 14773 1

原创 REDIS学习(4)spring boot redisTemplate 对REDIS的简单封装,以及对引用包的说明,以及对序列化的详细说明

综合1,2,3以及目前,我们所引用的redis包不过是 org.springframework.boot spring-boot-starter-redis 添加进来后引用包至少有spring-boot-starter-redis-1.3.5.RELEASE.jarspring-data-redis-1.6.4.RELEASE.jarjedis-2.7.

2016-08-10 17:28:40 30327

原创 JAVA 8 并发增强 (6)并行数组

String contents = new String(Files.readAllBytes(Paths.get("test.txt")), StandardCharsets.UTF_8); String[] words = contents.split("[\\P{L}]+");// 根据非字母字符对字符串进行分隔 // Arrays.parallelSort(words); Ar

2016-08-10 09:55:56 3476

原创 JAVA 8 并发增强 (5) 线程安全的Set

Q:如何得到一个线程安全的Set? /* * 如何得到一个大的,线程安全的Set * 它其实是对ConcurrentHashMap对象的封装,所有的映射的值都是Boolean.TRUE */ Set words = ConcurrentHashMap. newKeySet(); words.add("a"); words.add("a"); word

2016-08-09 17:46:57 18855 2

原创 JAVA 8 并发增强 (4) ConcurrentHashMap批量操作

/* * java8为并发哈希映射提供了批量操作数据操作,即使在其他线程同时操作映射时也可以安全的执行。 * 批量数据操作会遍历映射并对匹配的元素进行操作。在批量操作过程中,不需要冻结映射的一个快照。除非你恰好知道在这段时间 * 内映射没有被修改,否则你应该将结果看作是映射状态的一个近似值。批量操作有三类 * a,search会对每个键或值应用一个函数,直到函数返回一个nu

2016-08-09 17:10:30 3155

原创 JAVA 8 并发增强 (3)ConcurrentHashMap改进

/** * ConcurrentHashMap是线性安全的,多个线程不需要对内部结构造成破坏,就可以删除或者添加元素。 * 性能高,允许多个线程并发更新哈希表的不停部分,而不会造成相互堵塞 * ConcurrentHashMap的size是int类型,J8为了应付数量巨大的并发哈希映射,引入了一个mappingCount方法 * 用来返回一个反应大小的long型值 tips:哈希映射将会将

2016-08-09 15:43:10 3816

原创 JAVA 8 并发增强 (2)乐观读

/* * J8添加了StampedLock类,它用来实现乐观读。 首先调用tryOptimisticRead方法,此时会获得一个“印戳”。然后读取值并检查“印戳” * 是否仍然有效(例如其他线程已经获得了一个读锁)。如果有效,就可以使用这个值。如果无效,就会获得一个读锁(它会阻塞所有的写锁) */public class Vector { private int size; priva

2016-08-09 14:50:52 809

原创 JAVA 8 并发增强(1) 多线程修改某个计数器的方式

Q:如何正确的并发修改一个AtomicLong的值?/*不同线程检测最大值*/AtomicLong largest = new AtomicLong();long obsvValue = 0;/*错误的方式,此更新不是原子性的*/largest.set(Math.max(largest.get(), obsvValue));/* 正确的方式,这种方式比锁快 */long

2016-07-29 10:00:02 2209

原创 JVM参数,启动jar 包以及 启动tomcat的 JVM参数设置

启动示例public class TestJVM { public static void main(String[] args) { long maxM = Runtime.getRuntime().maxMemory(); long totalM = Runtime.getRuntime().totalMemory(); long usedM = Runtime

2016-07-27 15:35:33 16301

原创 服务器实时通知客户端方案,服务器发送/推送事件方案(1)websocket

My WebSocket Welcome Send Close var websocket = null; //判断当前浏览器是否支持WebSocket if ('WebSocket' in window) { websocket = new WebSocket("ws://localhost:8084/websocket"); } else {

2016-07-12 10:56:15 4675 2

原创 JVM(2)不同的垃圾回收器的比较

4款Java垃圾回收器——错误的选择导致糟糕的性能对大多数开发人员而言有两件事情是个谜——垃圾回收以及异性。由于我对后者也不是特别了解,我想我还是试着说说前者吧,尤其是随着Java 8的到来,这个领域也发生了许多重大的变化及提升,其中最重要的莫过于持久代(PermGen)的删除以及一些令人振奋的新的优化(后面会陆续提及这些)。说起垃圾回收,许多人都了解它的概念,也在日常的编程中有所

2015-05-05 14:00:37 785

原创 关于数据序列化(2)二进制流示例

像这样大家觉的直接writeInt(),writeByt();用来跟客户端通讯和做持久化存在硬盘有什么问题吗protobuf哪里能看出来是省资源了,他的原理不也是格式化存储吗难道会比直接写二进制流还省?

2015-04-01 09:00:32 1681

原创 关于数据序列化(1)protobuf 示例(目前不支持Java8貌似)

最近用protobuf来做对象的序列化(不知道我这么表达对不对),用的是百度的jprotobuf,使用注解,当然还有不使用注解的经典方式,本人没用过,发现工作中的竟然在JDK7报错(真怀疑为啥生产用JDK6,现在JDK8了都)只好在github下了最新的,当然google的jar包仍然是必须的不过有个疑问,protobuf的好处仅仅是为了提供一个兼容跨平台的格式吗,既然最后都是

2015-03-31 22:13:34 2783

原创 Java控制并发 AtomicBoolean Lock Volatile

sychrognized + volatile控制并发的疑问:这里把volatile 关键字去掉会有什么不一样吗???

2014-07-17 11:49:48 1832

原创 Logback手册 Chapter 2: Architecture

LogBack的结构

2014-06-27 11:48:31 1395

原创 java i++ 并非原子操作的解决方法——用AtomicInteger

public class Test1 { private static int a = 0; public static void main(String[] args) throws InterruptedException{ System.err.println("LOL"); int n=500000; while(n-->0){ startAdd(); }

2014-05-24 16:52:33 2364 1

原创 @Import注解根据注解参数,动态选择的两种方法

目前想实现的功能:根据注解的参数决定import那个类,如果是A我注册serviceA, 如果是B 我注册serviceB。

2022-11-02 09:52:16 274 1

原创 VS Code使用技巧(持续更新中)

切换语言,按F1后弹出命令控制器,选择configure display language。

2022-08-29 13:53:41 237

原创 是用wireshark抓包没权限

是用wireshark抓包没权限,下载bpf后仍然提示没有权限

2022-08-07 13:37:44 324

原创 IDEA远程调试

IDEA远程调试配置

2022-07-27 11:12:33 109

原创 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

mvn java_home mac

2022-07-25 19:41:38 456

原创 iterm2记住账号密码

iterm2

2022-06-30 19:30:35 347

原创 连接GIT报Permission denied (publickey).错误

在使用ed25519代替rsa生成公钥并在github上配置后,git命令反复提示没权限提示Permission denied (publickey).ssh -vT [email protected] 看细节最后参考官网。寻找蛛丝马迹:错误:权限被拒绝(公钥) - GitHub Docs“权限被拒绝”错误表示服务器拒绝了您的连接。 可能有多个原因,最常见的如下所述。https://docs.github.com/cn/authentication/troubleshooting-ssh/er

2022-04-05 00:07:22 1023

原创 IDEA 同步配置信息

1.检查有无插件IDE Settings Sync2. File -> Manage IDE Settings -> IDE Settings Sync -> Sync Plugins Silently

2022-01-05 17:07:02 1521

原创 Mysql workbench画ER图

(1)create new Models(2) Database -> Reverse Engineer...(3) Database -> Reverse Engineer...(4) 一直点continue(5)搞掂

2022-01-05 16:48:23 1692

原创 猛学亚马逊:顾客至上 Obsession over customers

推动了整个“亚马逊飞轮”转动的最重要的一个核心理念:顾客至上(Obsession over customers)。其实很多公司都会谈用户/顾客的重要性,但是真正的理念不是平时喊喊口号用的,而是在你面临艰难抉择的时候,指引你的行动的。而亚马逊的很多做法正是这种精神的最好体现。这节课就举几个小例子。故事一:要不要删差评亚马逊刚成立时,就给用户开通了评论商品的功能。结果收到一些供应商的抱怨:你们到底懂不懂自己在干什么啊?你们是靠卖东西赚钱的,为什么允许别人在你们的网站上发负面评论呢?当时亚马逊

2021-12-10 10:42:24 1077

原创 拥塞控制协议BBR

BBR可以用在TCP,以及应用限流,QUICK等 /** * Apply {@link SystemRule} to the resource. Only inbound traffic will be checked. * * @param resourceWrapper the resource. * @throws BlockException when any system rule's threshold is exceeded. */

2021-12-09 19:48:38 620

数据结构树与二叉树数据结构树与二叉树

数据结构树与二叉树数据结构树与二叉树数据结构树与二叉树

2010-05-05

C程序设计语言(第2版·新版).rar+C程序设计语言(第2版·新版)习题解答.rar

C程序设计语言(第2版·新版).rar+C程序设计语言(第2版·新版)习题解答.rarC程序设计语言(第2版·新版).rar+C程序设计语言(第2版·新版)习题解答.rar

2010-03-27

codeblocks 编程好软件 c++ 各种

codeblocks 编程好软件 c++ 学生编程的好帮手

2010-03-21

Matlab【课件Matlab【课件Matlab【课件】

Matlab【课件Matlab【课件Matlab【课件】

2010-03-21

素描自学 让编程之余 自学绘画水到渠成

素描自学 让编程之余 自学绘画水到渠成 爱好绘画的可以下

2010-03-21

21天学通c++ 习题以及代码

21天学通c++ 习题及代码 学习《21天学通c++ 》的好伴侣

2010-02-15

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

TA关注的人

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