4 国斌

Java研发工程师

我要认证

毕业于哈尔滨工业大学,就职于互联网公司。点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。

等级
TA的排名 302

黑客技术:计时攻击 TIMING ATTACKS

相信刚看到这段源码的人会感觉挺奇怪的,这个函数的功能是比较两个字符串是否相等,如果要判断两个字符串是否相等,正常人的写法应该是下面这个样子的(来自JDK8 的 `String.equals()`-有删减):

2017-02-19 18:48:02

详述 Redis 选择单线程模型的原因以及 I/O 多路复用

文章目录几种 I/O 模型Blocking I/OI/O 多路复用Reactor 设计模式I/O 多路复用模块封装 select 函数封装 epoll 函数子模块的选择总结最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,

2020-07-29 15:23:05

带你了解 Kubernetes 的二三事儿

文章目录一、Docker 的管理痛点二、什么是 K8s ?三、云架构 & 云原生云和 K8s 是什么关系常见几类云架构云原生四、K8s 架构原理K8s 架构Master 节点Node 节点五、K8s 核心组件K8s 组件Pod 是什么?Pod 到底用来干什么?Web 服务集群如何实现?Pod 底层网络,数据存储是如何进行的?ReplicaSet 副本控制器Deployment 部署对象MySQL 使用容器化部署,存在什么样的问题?StatefulSet六、K8s 的服务注册与发现Pod 的结构是怎样

2020-07-24 08:33:04

重复读取 HttpServletRequest 中 InputStream 的方法

开篇第一句,大家是否遇到过这样的问题:通过httpServletRequest.getInputStream()获取InputStream之后,遇到Required request body is missing错误?如果你回答“是”的话,那你就来对了。在本文中,我们就来讨论一下,问题 1:为什么InputStream无法重复读取?问题 2:如何重复读取HttpServletRequest中的InputStream?回答第一个问题对于第一个问题,“为什么InputStream无法重复读取

2020-07-17 07:43:45

浅谈基于 Git 的版本控制工作流

博主说:本文借鉴了很多「 DRPrincess」博主的文章内容,在此对其表示感谢。文章目录版本控制简史什么是工作流?Git Flow主要分支辅助分支Merge 加上 --no-ff 参数示意图GitHub Flow模型说明示意图特色功能PR问题追踪GitLab FlowGit Flow & GitHub Flow 的瑕疵GitLab Flow 解决方案版本的延迟发布 Prodution Branch不同环境的部署 Environment Branches & Upstream Firs.

2020-07-11 11:11:23

面试题:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?

文章目录面试题面试官心理分析面试题剖析为什么使用消息队列?消息队列有什么优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?面试题为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。

2020-07-07 14:27:44

详述 Java NIO 以及 Socket 处理粘包和断包方法

NIO 是 New I/O 的简称,是 JDK 1.4 新增的功能,之所以称其为 New I/O,原因在于它相对于之前的 I/O 类库是新增的。由于之前老的 I/O 类库是阻塞 I/O,New I/O 类库的目标就是要让 Java 支持非阻塞 I/O,所以也有很多人喜欢称其为 Non-block I/O,即非阻塞 I/O。NIO 的文件读写设计颠覆了传统 IO 的设计,采用『通道』+『缓存区』使得新式的 I/O 操作直接面向缓存区。NIO 弥补了原来同步阻塞 I/O 的不足,它在标准 Java 代码中提

2020-07-04 12:23:42

带你详细了解,一致性哈希算法的实现原理

一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过 Memcached 缓存数据库的人都知道,Memcached 服务器端本身不提供分布式 Cache 的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:

2017-05-18 15:54:52

由阿里巴巴 Java 开发规约 HashMap 条目引发的故事

大热的《[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c/)》中有提到:- 【推荐】集合初始化时,指定集合初始值大小。说明:`HashMap`使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(`16`)即可:```java public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); }```

2017-04-30 20:46:08

在使用 Spring Boot 的过程中,你可能不太知道的点?

如题,本文主要罗列一些在使用 Spring Boot 的过程中,大家可能不太知道的点:Spring Boot 的精髓:自动配置、起步依赖、Actuator 和命令行界面。Spring Initializr:Click HERE,Spring Boot 快速搭建网站。@SpringBootApplication注解开启了 Spring 组件扫描和 Spring Boot 的主动配置功能。org.springframework.boot:spring-boot-maven-plugin构建插件的主要功

2020-06-22 22:32:16

使用 VisualVM 和 JProfiler 进行性能分析及调优

文章目录概述概述开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,

2020-06-19 22:15:40

设置 Linux 别名命令 alias 永久生效的方法

直入主题,编辑.bashrc文件,该文件主要用于保存一些个性化的设置,如命令别名、路径等:vim .bashrc执行上述命令后,如下图所示:如上图所示,我们可以在User specific aliases and functions这一行下面新增我们的个性化配置,如设置别名:alias golog='cd /apps/srv/instance/csdn-core/logs'配置示例,如下图所示:如上图所示,新增golog配置后,执行:wq命令保存文件。保存文件后,在执行source

2020-06-18 09:06:18

使用 Redis 统计网站 UV 的方法

文章目录前言思路HyperLogLog使用 Redis 命令操作使用 Java 代码操作HyperLogLog 使用原理及特点使用 Java 代码实现 HyperLogLog小结前言网页 UV(Unique Visitor)就是指网站的独立用户访问量 Unique Visitor。即相同用户的多次访问需要去重。思路一想到 UV 去重,我猜大家都想到了 Set 集合类。使用Set集合是一个不错的办法,Set里面存储用户的id。每一个用户访问页面的时候,我们直接把id存入Set,最终获取Set的si

2020-06-15 15:39:18

Kafka:高吞吐量、消息精确一次语义以及保证消息顺序

文章目录前言高吞吐量顺序读写Page Cache零拷贝分区分段+索引批量读写批量压缩消息精确一次语义消息系统语义概述必须被处理的故障Apache Kafka 中的精确一次语义幂等性:每个分区中精确一次且有序事务:跨分区原子写入真实案例:Apache Kafka 中的精确一次流处理保证消息顺序前言Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hado

2020-06-14 16:43:32

详述 Java 并发编程中 CAS 以及 AQS 的实现原理

版权声明:本文的内容大都来自于「vioao」的博文,略作修改。文章目录CAS什么是 CAS?CAS 的应用CAS 的缺点AQS什么是 AQS?AQS 的应用AQS 实现原理浅析CAS什么是 CAS?CAS(Compare And Swap),即比较并交换,是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS 操作包含三个操作数——内存位置V、预期原值A和新值B。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值;否则,处理器不做任何操作。无论哪种情况,它都会在 CAS .

2020-06-07 10:08:11

详述 ThreadLocal 的实现原理及其使用方法

文章目录实现原理ThreadLocal 的 get 方法ThreadLocal 的 set 方法ThreadLocal 的特性使用方法Threadlocal是一个线程内部的存储类,可以在指定线程内存储数据,并且该数据只有指定线程能够获取到,其官方解释如下:/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thre

2020-05-30 18:21:27

详述 Spring MVC 启动流程及相关源码分析

- 部署描述文件中(例如 Tomcat 的`web.xml`)由`<listener>`元素标记的事件监听器会被创建和初始化- 对于所有事件监听器,如果实现了`ServletContextListener`接口,将会执行其实现的`contextInitialized()`方法- 部署描述文件中由`<filter>`元素标记的过滤器会被创建和初始化,并调用其`init()`方法- 部署描述文件中由`<servlet>`元素标记的 Servlet 会根据`<load-on-startup>`的权值按顺序创

2017-02-14 22:23:05

详述 Spring Boot 中内嵌 Tomcat 的实现原理

对于一个 Spring Boot Web 工程来说,一个主要的依赖标志就是有`spring-boot-starter-web`这个`starter`,`spring-boot-starter-web`模块在 Spring Boot 中其实并没有代码存在,只是在`pom.xml`中携带了一些依赖,包括`web`、`webmvc`和`tomcat`等

2017-05-01 13:59:27

详述 synchronized 和 volatile 的实现原理以及两者的区别

版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchronized 和 volatile 的区别线程安全在并发编程中,线程安全是我们最需要关心的问题,而导致并发问题的原因,主要是:存在共享数据;并且,存在多条线程共同操作共享数据。因此,为了解决这个问题,我.

2020-05-24 19:22:31

详述 JDK 和 CGLIB 动态代理的实现原理以及两者的区别

文章目录JDK 动态代理的实现原理代码示例源码分析CGLIB 动态代理的实现原理代码示例源码分析JDK 和 CGLIB 动态代理的区别JDK动态代理CGLIB动态代理何时使用JDK还是CGLIB?如何强制使用CGLIB实现AOP?JDK动态代理和CGLIB字节码生成的区别?CGlib比JDK快?Spring如何选择用JDK还是CGLIB?代码示例JDK和CGLIB动态代理总结JDK 动态代理的实现原理天天的都听到人们说JDK动态代理,听上去感觉好屌的样子,为什么要叫JDK动态代理?是因为代理对象是由J

2020-05-23 19:28:52

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 签到王者
    签到王者
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 推荐红人
    推荐红人
    发布高质量Blink获得高赞和评论,进入推荐栏目即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。