- 博客(436)
- 资源 (32)
- 收藏
- 关注
原创 史上最简单的 MySQL 教程
史上最简单的 MySQL 教程数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。在这里,作者将用最简单的语言详细讲述 MyS...
2019-12-20 10:41:31 4926 1
原创 史上最简单的 GitHub 教程
1 简介 GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,在 GitHub 上托管的版本数量非常之多,其
2017-03-27 17:18:51 255403 48
原创 史上最简单的 IntelliJ IDEA 教程
温馨提示:本教程的 GitHub 地址为「intellij-idea-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。1 简介 IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认为最好的 Java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、各类版本工具(Git、SVN、GitHub ...
2017-03-10 09:17:08 322878 63
原创 使用 gomonkey Mock 函数及方法时遇到 panic: permission denied 的问题及解决方法
基于 Golang 语言,使用 gomonkey 来 mock 函数及方法,在 Mac 环境执行的时候,遇到如下错误:panic: permission denied [recovered]panic: permission denied显然,执行单测的时候,遇到了权限问题。
2022-06-13 10:43:27 8102 1
原创 使用 gomonkey Mock 函数及方法
在 Golang 语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的 Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否符合预期。其中,在 Mock 其他函数及方法的时候,我们常用到的一个测试类库是 gomonkey。特别地,对于方法和函数的 Mock,略有差异,在这里我们就分别给出函数和方法 Mock 示例,方便大家参考。
2022-06-02 11:19:18 4686 1
原创 使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法
基于 Golang 语言,写单元测试,使用gomonkey对于某个函数进行 Mock,遇到如下问题:- 使用「正常模式」执行单元测试,Patch不生效,Mock 失败;- 使用「Debug模式」执行单元测试,Patch生效,Mock 成功。说实话,看到这样的现象感觉很怪异,那么,为什么会出现这个问题呢?
2022-06-01 19:59:11 4961
原创 详述 Git 的 rebase 命令使用方法
在基于 Git 的开发过程中,我们很容易遇到合并代码的情况,例如我们从 master 分支拉取了一个 feature 分支,当我们开发到一段时间之后,可能需要将 master 的代码合并到我们当前的 feature 分支之中。
2022-05-11 21:46:08 12513
原创 使用 Golang 实现简易的令牌桶算法
在网络中传输数据的时候时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。
2022-04-24 20:31:49 2485
原创 详述 Mac GoLand 安装后打不开(闪退)的解决方法
文章目录现象描述解决方法Method 1Method 2现象描述安装了当前最新版(2021.2.3)的 GoLand,之前的版本是2019.2.5,但比较诡异的是:安装成功后,死活打不开 GoLand,给人的感觉就是没有任何反映最初,我怀疑可能是 GoLand 的版本和 MacOS 的版本不兼容,于是我下载了两三个低版本的 GoLand,但问题依旧。好吧,在网上搜了搜,找到了两篇“疑似”遇到过相同问题的博文,就照着操作了一下,其中第一个方法在我这里没有起作用,第二个方法倒是成功解决了我的问题。
2021-10-13 15:12:11 7159
原创 在 MacOS 系统下创建 /home 目录的方法
文章目录前言SIP关闭SIP打开SIP查看 SIP 当前状态创建 /home 目录前言在「在 MacOS 系统的 /home 目录下创建文件夹的方法」这篇文章中,我们描述了如何在/home目录下创建文件夹的方法,但如果我们的 MacOS 系统连/home目录都没有呢?默认情况下,MacOS 系统的根目录是不允许创建/home目录的,所以我们还得了解如何在 MacOS 系统下创建/home目录,也就是本文讲解的内容。SIPSIP 全称为「System Integrity Protection」即「系
2021-09-18 17:31:58 3351
原创 在 MacOS 系统的 /home 目录下创建文件夹的方法
文章目录前提修改 auto_master加载 auto_master创建自定义文件夹前提Rt,本文讲述如何在 Mac OS 系统中,在/home目录下创建文件夹的方法。之所以会有本篇文章,是因为在默认情况下,该目录是不允许用户进行变更操作的。不废话,直接给出修改方法,有需要的同学按照下面的步骤操作即可。修改 auto_master执行sudo vim /etc/auto_master命令: 1 # 2 # Automounter master map 3 # 4 +auto_ma
2021-09-03 14:44:17 8260 2
原创 记一次 Gorm 批量插入遇到的问题以及解决方案
文章目录问题现象解决方案问题现象最初,我们用的是老版本的 Gorm,但是因为老版本不支持批量插入的功能,所以我们将 Gorm2 做了升级,升级到1.21.9版本。https://github.com/go-gorm/gorm/releases/tag/v1.21.9升级之后,Gorm 确实支持了批量插入的功能。但因为我们后续用到了批量插入返回的记录ID,也就是数据库自增生成的主键 ID 这个值,这时就出现了问题。当然,出现这个问题是有一个前提的,那就是数据库设置的自增步长大于 1,如果自增步长是
2021-06-17 22:34:11 5591 1
原创 深入理解 Java 线程池的实现原理
文章目录1 线程状态2 线程池2.1 线程池的作用2.2 线程池的实现1 线程状态既然要说线程,我们就先来了解一下线程的几种状态: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;...
2021-01-08 19:46:46 1559 4
转载 详述 TCP 的 TIME_WAIT 状态要维持 2MSL 的原因
本文主要分析为什么 TIME_WAIT 状态的持续时间是 2MSL 而不是 1MSL,3MSL 或其它的时长,而不会详细描述为什么需要 TIME_WAIT 状态。
2020-12-07 14:47:37 1776
原创 使用 Apollo 为静态变量赋值的方法
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。但是,在使用 Apollo 的时候,我们可能会遇到这样的场景:在类中,想要为静态属性赋值。我们且不考虑什么时候会出现这样的需求,仅考虑如果有这样的需求,我们应该怎么处理?实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。
2020-12-02 11:23:11 4683
原创 Spring Boot 自定义 Swagger2 请求 URL 路径的两种方法
文章目录前言方法一:修改应用根路径方法二:引入 Swagger2 前端代码总结前言首先,把 Swagger2 的依赖引进来:<!--swagger 版本--><swagger.version>2.7.0</swagger.version><!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>spr
2020-11-26 15:28:18 31445
原创 详述 IntelliJ IDEA 遇到 Maven 项目 pom.xml 文件没有识别的解决方法
文章目录问题现象解决方法问题现象有的时候,我们可能会遇到 IDEA 没有识别 Maven 项目pom.xml的问题,其表现出来的现象就是:究其原因,就是 IDEA 把pom.xml文件当成了普通的xml格式文件。解决方法这个问题的解决方法比较简单,IDEA 已经提供了相应的功能。如上图所示,鼠标右键点击pom.xml文件,呼出菜单栏,点击上图标记出来的Add as Maven Project按钮即可。...
2020-11-03 17:10:34 6944 3
原创 Spring Cloud 优雅下线以及灰度发布
文章目录前言优雅下线常见的下线方式优雅的下线方式灰度发布蓝绿部署滚动部署金丝雀部署前言在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID和kill -9 PID都是暴力杀死服务,相对于kill -9 PID来
2020-10-20 10:43:55 7956 18
原创 带你了解「美团、百度和滴滴」的分布式 ID 生成系统
文章目录美团背景常见方法介绍UUID类snowflake方案数据库生成Leaf 方案实现Leaf-segment 数据库方案双 buffer 优化Leaf 高可用容灾Leaf-snowflake 方案弱依赖 ZooKeeper解决时钟问题Leaf 现状百度snowflakeDefaultUidGeneratordelta secondsworker idsequence小结CachedUidGeneratorRingBuffer Of FlagRingBuffer Of UIDworker id初始化取值小
2020-10-16 21:15:50 5353 1
转载 饿了么交易系统 5 年演化史
作者介绍:杨凡,花名挽晴,饿了么高级架构师,2014 年加入饿了么,2018 年随饿了么被阿里巴巴收购一同加入阿里巴巴,4 年团队管理经验,4 年主要从事饿了么交易系统建设,也曾负责过饿了么账号、评价、IM、履约交付等系统。2014年12月加入饿了么,当时参与后台系统的研发(Walis+Javis=>Walle),主要面向客服和BD。2015年5月开始接触订单系统的研发,7月负责订单研发组;度过单体应用到服务化这个阶段。2016年初搭建订单的测试团队,订单拆分为正逆向后,主要负责正向和交付部.
2020-09-18 21:50:37 4924 3
转载 新一代垃圾回收器 ZGC 的探索与实践
文章目录GC之痛ZGC(The Z Garbage Collector)是 JDK 11 中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过 10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持 8MB ~ 4TB 级别的堆(未来支持 16TB)。从设计目标来看,我们知道 ZGC 适用于大内存低延迟服务的内存管理和回收。本文主要介绍 ZGC 在低延时场景中的应用和卓越表现,文章内容主要分为四部分:GC 之痛:介绍实际业务中遇到的 GC 痛点,并分析 CMS 收集器
2020-08-15 14:16:33 2438
转载 黑客技术:计时攻击 TIMING ATTACKS
相信刚看到这段源码的人会感觉挺奇怪的,这个函数的功能是比较两个字符串是否相等,如果要判断两个字符串是否相等,正常人的写法应该是下面这个样子的(来自JDK8 的 `String.equals()`-有删减):
2020-08-03 08:44:04 9118
转载 详述 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 23:00:04 1623
转载 带你了解 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 974
原创 重复读取 HttpServletRequest 中 InputStream 的方法
开篇第一句,大家是否遇到过这样的问题:通过httpServletRequest.getInputStream()获取InputStream之后,遇到Required request body is missing错误?如果你回答“是”的话,那你就来对了。在本文中,我们就来讨论一下,问题 1:为什么InputStream无法重复读取?问题 2:如何重复读取HttpServletRequest中的InputStream?回答第一个问题对于第一个问题,“为什么InputStream无法重复读取
2020-07-17 07:43:45 4994
原创 浅谈基于 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 2472 3
转载 面试题:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
文章目录面试题面试官心理分析面试题剖析为什么使用消息队列?消息队列有什么优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?面试题为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。
2020-07-10 22:48:12 3894 2
原创 详述 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 2642 1
转载 带你详细了解,一致性哈希算法的实现原理
一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过 Memcached 缓存数据库的人都知道,Memcached 服务器端本身不提供分布式 Cache 的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:
2020-06-25 09:44:20 4377
转载 由阿里巴巴 Java 开发规约 HashMap 条目引发的故事
大热的《[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c/)》中有提到:- 【推荐】集合初始化时,指定集合初始值大小。说明:`HashMap`使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(`16`)即可:```java public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); }```
2020-06-24 07:24:33 2780 5
原创 在使用 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 853
原创 使用 VisualVM 和 JProfiler 进行性能分析及调优
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,
2020-06-19 22:15:40 7682 1
原创 设置 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 4358
转载 使用 Redis 统计网站 UV 的方法
文章目录前言思路HyperLogLog使用 Redis 命令操作使用 Java 代码操作HyperLogLog 使用原理及特点使用 Java 代码实现 HyperLogLog小结前言网页 UV(Unique Visitor)就是指网站的独立用户访问量 Unique Visitor。即相同用户的多次访问需要去重。思路一想到 UV 去重,我猜大家都想到了 Set 集合类。使用Set集合是一个不错的办法,Set里面存储用户的id。每一个用户访问页面的时候,我们直接把id存入Set,最终获取Set的si
2020-06-16 07:06:32 1746
原创 Kafka:高吞吐量、消息精确一次语义以及保证消息顺序
文章目录前言高吞吐量顺序读写Page Cache零拷贝分区分段+索引批量读写批量压缩消息精确一次语义消息系统语义概述必须被处理的故障Apache Kafka 中的精确一次语义幂等性:每个分区中精确一次且有序事务:跨分区原子写入真实案例:Apache Kafka 中的精确一次流处理保证消息顺序前言Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hado
2020-06-14 16:43:32 3273
原创 详述 Java 并发编程中 CAS 以及 AQS 的实现原理
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 1996
原创 详述 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 2697 1
转载 详述 Spring MVC 启动流程及相关源码分析
- 部署描述文件中(例如 Tomcat 的`web.xml`)由`<listener>`元素标记的事件监听器会被创建和初始化- 对于所有事件监听器,如果实现了`ServletContextListener`接口,将会执行其实现的`contextInitialized()`方法- 部署描述文件中由`<filter>`元素标记的过滤器会被创建和初始化,并调用其`init()`方法- 部署描述文件中由`<servlet>`元素标记的 Servlet 会根据`<load-on-startup>`的权值按顺序创
2020-05-30 09:00:52 5733 8
2019年北京市导游考试导游词.zip
2019-12-05
阿里巴巴 2016 双 11 背后的技术
2017-01-20
Cornerstone(免费破解版)
2017-01-12
算法设计与分析
2016-11-19
深入理解Java虚拟机:JVM高级特性与最佳实践
2016-11-14
设计模式之禅
2016-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人