工具及其它
文章平均质量分 85
安正勋
点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。
展开
-
详述 Git 的 rebase 命令使用方法
在基于 Git 的开发过程中,我们很容易遇到合并代码的情况,例如我们从 master 分支拉取了一个 feature 分支,当我们开发到一段时间之后,可能需要将 master 的代码合并到我们当前的 feature 分支之中。原创 2022-05-11 21:46:08 · 11876 阅读 · 0 评论 -
详述 Mac GoLand 安装后打不开(闪退)的解决方法
文章目录现象描述解决方法Method 1Method 2现象描述安装了当前最新版(2021.2.3)的 GoLand,之前的版本是2019.2.5,但比较诡异的是:安装成功后,死活打不开 GoLand,给人的感觉就是没有任何反映最初,我怀疑可能是 GoLand 的版本和 MacOS 的版本不兼容,于是我下载了两三个低版本的 GoLand,但问题依旧。好吧,在网上搜了搜,找到了两篇“疑似”遇到过相同问题的博文,就照着操作了一下,其中第一个方法在我这里没有起作用,第二个方法倒是成功解决了我的问题。原创 2021-10-13 15:12:11 · 6963 阅读 · 0 评论 -
在 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 · 3139 阅读 · 0 评论 -
在 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 · 7861 阅读 · 1 评论 -
使用 Apollo 为静态变量赋值的方法
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。但是,在使用 Apollo 的时候,我们可能会遇到这样的场景:在类中,想要为静态属性赋值。我们且不考虑什么时候会出现这样的需求,仅考虑如果有这样的需求,我们应该怎么处理?实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。原创 2020-12-02 11:23:11 · 4514 阅读 · 0 评论 -
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 · 29846 阅读 · 0 评论 -
Spring Cloud 优雅下线以及灰度发布
文章目录前言优雅下线常见的下线方式优雅的下线方式灰度发布蓝绿部署滚动部署金丝雀部署前言在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID和kill -9 PID都是暴力杀死服务,相对于kill -9 PID来原创 2020-10-20 10:43:55 · 7791 阅读 · 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 · 5089 阅读 · 1 评论 -
详述 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 · 1577 阅读 · 0 评论 -
带你了解 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 · 935 阅读 · 0 评论 -
黑客技术:计时攻击 TIMING ATTACKS
相信刚看到这段源码的人会感觉挺奇怪的,这个函数的功能是比较两个字符串是否相等,如果要判断两个字符串是否相等,正常人的写法应该是下面这个样子的(来自JDK8 的 `String.equals()`-有删减):转载 2020-08-03 08:44:04 · 8945 阅读 · 0 评论 -
重复读取 HttpServletRequest 中 InputStream 的方法
开篇第一句,大家是否遇到过这样的问题:通过httpServletRequest.getInputStream()获取InputStream之后,遇到Required request body is missing错误?如果你回答“是”的话,那你就来对了。在本文中,我们就来讨论一下,问题 1:为什么InputStream无法重复读取?问题 2:如何重复读取HttpServletRequest中的InputStream?回答第一个问题对于第一个问题,“为什么InputStream无法重复读取原创 2020-07-17 07:43:45 · 4887 阅读 · 0 评论 -
浅谈基于 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 · 2381 阅读 · 3 评论 -
面试题:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
文章目录面试题面试官心理分析面试题剖析为什么使用消息队列?消息队列有什么优缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?面试题为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。转载 2020-07-10 22:48:12 · 3846 阅读 · 2 评论 -
超详细:Java 反序列化漏洞的原理分析
世界上有三件事最难:- 把别人的钱装进自己的口袋里- 把自己的想法装进别人的脑袋里- 让自己的代码运行在别人的服务器上转载 2017-09-28 17:01:12 · 3454 阅读 · 1 评论 -
在使用 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 · 838 阅读 · 0 评论 -
使用 VisualVM 和 JProfiler 进行性能分析及调优
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,原创 2020-06-19 22:15:40 · 7292 阅读 · 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 · 4096 阅读 · 0 评论 -
使用 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 · 1700 阅读 · 0 评论 -
详述 Spring Boot 中内嵌 Tomcat 的实现原理
对于一个 Spring Boot Web 工程来说,一个主要的依赖标志就是有`spring-boot-starter-web`这个`starter`,`spring-boot-starter-web`模块在 Spring Boot 中其实并没有代码存在,只是在`pom.xml`中携带了一些依赖,包括`web`、`webmvc`和`tomcat`等转载 2020-05-26 22:41:02 · 4065 阅读 · 0 评论 -
十分钟搞懂 Lombok 的使用方法与实现原理
Lombok 是一款好用顺手的工具,就像 Google Guava 一样,在此予以强烈推荐,每一个 Java 工程师都应该使用它。Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(`POJO`),它通过注释实现这一目的。通过在开发环境中使用 Lombok,开发人员可以节省构建诸如`hashCode()`和`equals()`这样的方法以及以往用来分类各种`accessor`和`mutator`的大量时间。转载 2020-05-23 08:11:44 · 2810 阅读 · 1 评论 -
二叉树的前序、中序、后序、层序以及蛇形遍历的实现方式
文章目录树节点的定义二叉树的前序遍历递归迭代二叉树的中序遍历递归迭代二叉树的后序遍历递归迭代二叉树的层序遍历递归迭代二叉树的蛇形遍历递归迭代总结树节点的定义首先,给出树节点的定义,方便我们理解下面的算法:public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; }}原创 2020-05-16 19:01:53 · 1338 阅读 · 0 评论 -
基于 Redis 的分布式锁实现
文章目录关于分布式锁基于数据库实现分布式锁基于数据库表的增删基于数据库排他锁基于数据库锁的优缺点基于 Zookeeper 实现分布式锁基于缓存实现分布式锁基于 Redis 的分布式锁实现SETNX存在死锁的问题一种实现方式获取锁释放锁总结关于分布式锁很久之前有讲过并发编程中的锁「并发编程的锁机制:synchronized和lock」。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需...转载 2020-05-07 19:44:04 · 697 阅读 · 0 评论 -
常用的分布式事务解决方案
众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~转载 2020-05-07 15:40:16 · 14405 阅读 · 14 评论 -
面试官:什么是死锁?如何解决死锁?写一段死锁的代码吧!
## 什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括:- 系统资源不足;- 程序执行的顺序有问题;- 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,那么死锁出现的可能性就很低;否则,就会因争夺有限的资源而陷入死锁。其次,程序执行的顺序与速度不同,也可能产生死锁。产生死锁的四个必要原创 2020-05-06 20:10:31 · 20091 阅读 · 23 评论 -
面试官:请你谈谈 Java 的类加载过程
刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 类的加载过程吗?这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你 Java 功底的问题。如果你答好了,这是你应该的;如果你没答好,那么对不起,面试官心中已经给了你不及格。今天,小编就 Java 类加载过程这个问题,抛砖引玉,说一下自己的理解,如果有不对的地方,欢迎大家在评论去指正。转载 2020-05-05 19:46:09 · 2788 阅读 · 2 评论 -
详述 Spring 中 Bean 的生命周期
1 实例化 Bean2 设置对象属性(依赖注入)3 注入 Aware 接口4 BeanPostProcessor5 InitializingBean 与 init-method6 DisposableBean 和 destroy-method原创 2020-05-05 19:13:20 · 5182 阅读 · 0 评论 -
Java 内存溢出(OOM)异常完全指南
java.lang.OutOfMemoryError:Java heap spaceJava 应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:`Heap space`(堆空间)和`Permgen`(永久代)转载 2020-05-04 08:31:48 · 3638 阅读 · 0 评论 -
Spring IOC 容器源码分析:循环依赖的解决方法
Hello everybody,如题,这是一个招聘通知:招聘邮箱:guobinhit@qq.com福利情况:NO1. 带薪假期,国外团建,绩效奖金;NO2. 司龄满足7年发放足金纪念金牌,工龄满7年有无时限自由假;NO3. 每日健身名额,每周两次社团活动,包括羽毛球、篮球、足球和瑜伽。易宝支付是中国支付行业的开创者和领导者,也是互联网金融(ITFIN)和移动互联领军企业。易宝...转载 2020-04-30 16:53:10 · 2359 阅读 · 7 评论 -
调度服务 ScheduledExecutorService 经常卡顿问题的排查及解决方法
如上述代码所示,启动 10 个调度线程,延迟 10 秒,开始执行定时逻辑,然后每隔 2 秒执行一次定时任务。定时任务类为`TaskWorker`,其要做的事就是根据`offset`和`rows`参数,到数据库捞取指定范围的待处理记录,然后送到`TaskService`的`processTask`方法中进行处理。从逻辑上来看,该定时没有什么毛病,但是在执行定时任务的时候,却经常出现卡顿的问题,表现出来的现象就是:**定时任务不执行了**。原创 2020-04-20 17:32:17 · 82834 阅读 · 2 评论 -
记一次 JVM CPU 使用率飙高问题的排查过程
首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图:![cpu-usage](https://img-blog.csdnimg.cn/202004071615390.png)如上图所示,在 **下午3:45** 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?原创 2020-04-07 23:48:52 · 62129 阅读 · 39 评论 -
如何画出一张合格的技术架构图?
当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况:- 对着画布无从下手、删了又来?- 如何用一张图描述我的系统,并且让产品、运营、开发都能看明白?- 画了一半的图还不清楚受众是谁?- 画出来的图到底是产品图功能图还是技术图又或是大杂烩?- 图上的框框有点少是不是要找点儿框框加进来?- 布局怎么画都不满意……如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。转载 2020-03-24 14:39:25 · 3579 阅读 · 2 评论 -
详述 JedisCommands 接口中的方法说明
文章目录前言方法说明前言在 JedisCommands 接口中,其提供了操作 Redis 的全部方法,分别对应着 Redis 的各种操作命令,但遗憾的是,该接口中并没有给出详细的注释。在这种情况下,如果我们想知道某个方法的作用,就需要我们找到其对应的 Redis 命令来进行理解了,很不方便。因此,在本文中,给出 JedisCommands 接口中各方法的详细注释,希望对大家有所帮助!顺便,...原创 2020-03-22 16:15:26 · 5823 阅读 · 0 评论 -
来来来,我们聊一聊,为什么不建议使用递归操作?
Rt. 可能大家都或多或少的听见过类似的话或者建议:尽量少使用递归操作,甚至干脆就不要使用递归操作。但大家在听到这句话的时候,是否会产生过疑问,为什么不建议使用递归操作呢?现在,我们就一起聊聊这个话题,看看递归到底会产生什么样的问题。首先,大家思考一道算法题:如何实现二叉树的中序遍历?对于树的遍历,无论是前序、中序还是后序遍历,大家可能下意识的就会想到使用递归操作,为什么呢?因为递归...原创 2020-03-14 14:27:04 · 5749 阅读 · 4 评论 -
面试官,请不要再问我三次握手和四次挥手了,好吗?
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就...转载 2020-03-14 09:06:42 · 1355 阅读 · 1 评论 -
详述 Elasticsearch 通过 RESTful API 查询索引信息的方法
文章目录情景解决方案情景在使用 Elasticsearch 的时候,我们通常有两种方法来操作集群,第一种:在服务器或者终端,使用命令来操作集群;第二种:编写程序,通过 Elasticsearch 的 API 来操作集群。其中,第一种方式是功能最全的,Elasticsearch 的所有操作情形,都可以通过命令来实现;但与之相对的,第二种方式就显得相形见绌了,因为 Elasticsea...原创 2019-10-25 17:11:25 · 3230 阅读 · 3 评论 -
从 Windows 过度到 Mac 必备快捷键对照表(IntelliJ IDEA)
为了方便从Windows系统过度到Mac系统的IDEA使用者,本文列出了详细的快捷键对照表。转载 2017-01-03 10:56:03 · 46197 阅读 · 8 评论 -
一份平民化的应用性能优化CheckList(完整篇)
1 总原则作者说:这是一些正确但稍显废话的原则,但能指导后面每个章节的优化,所以还是要啰嗦一次。(1) 可扩展性架构,堆机器能不能解决问题是最最优先考虑的问题 (2)去中心化的点对点通信,优于通过中心代理的通信 (3)池化的长连接,优于短连接 (4)二进制数据,优于文本数据 (5)尽量减少交互,一次调用的粗粒度聚合接口 优于 多次调用的细粒度接口 (6)尽量减少交互,批量接口 优转载 2017-01-11 11:12:22 · 1313 阅读 · 0 评论 -
浅谈基于 JUnit 的单元测试
1 简介JUnit是一个Java语言的单元测试框架,它由 Kent Beck 和 Erich Gamma 建立,逐渐成为 xUnit 家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈,多数Java的开发环境都已经集成了JUnit作为单元测试的工具。在这里,一个单元可以是一个方法、类、包或者子系统。因此,单元测试是指对代码中的最小可测试单元进行检查和验证,以便确保它们正常工作。例如,我原创 2017-01-19 23:05:17 · 15573 阅读 · 3 评论 -
@RequestMapping 注解详述
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。转载 2017-01-05 18:46:22 · 2009 阅读 · 0 评论