- 博客(77)
- 收藏
- 关注
原创 Spring Cloud 热更新机制原理学习
博主在调研 Spring Cloud Config 跟 Apollo 配置中心的时候,对其中的热更新机制比较有兴趣,并阅读了相关的源码,在这里进行记录,方便以后查看。调研时使用的 Spring Boot 跟 Spring Cloud 的版本: <dependencyManagement> <dependencies> <...
2020-03-07 19:34:37 2092
原创 IDEA 修改全文搜索快捷键
IDEA 全文搜索快捷键经常与桌面自带软件冲突,博客给出修改方式默认路径IDEA 默认的全文搜索快捷键查看位置: Edit -> Find -> Find in Path修改路径全文搜索快捷键经常与桌面自带软件冲突,可以通过修改自带软件的快捷键,也可以通过修改IDEA的默认路径,修改方式:首先 File -> Settings -> Keymap 进行设置界面找到对应需要修改的配置右键选择Add Keyboard Shortcut 添加添加快捷方式如果添加的快.
2021-08-15 23:04:45 2471
原创 Java I/O模型笔记
学习笔记,整理I/O过程,区分同步异步,阻塞非阻塞常见概念,整理I/O模型,Java I/O模型1. I/O 过程我们编写的程序是运行在用户空间中,而用户空间无法直接操作内核空间,这就意味着,我们编写的程序,是无法直接访问由内核管理的I/O。因此,通常用户进程中的一次完成I/O交互应分为两个阶段:I/O调用阶段:应用程序向内核发起系统调用I/O执行阶段:等待数据阶段:内核等待I/O设备(磁盘/网络)准备数据拷贝数据阶段:将数据从内核缓存区拷贝到用户空间缓冲区从上面这个流程我们可.
2021-04-11 11:41:27 323
原创 grpc-java 常用.proto类型Java代码 demo
grpc-java 常用的.proto类型 demo 整理博主近期在调研 istio,其中涉及需要将自己部门的 rpc 框架切换到 grpc-java 上,因此对 grpc-java 进行了相关调研,这里就对常用的.proto类型进行整理。.proto文件中消息结构里用于定义字段的标准数据类型如下表所示,后面几列是.proto文件中定义的标准类型编译转换后在编程语言中的类型对照。下面将对上面提到的 .proto 类型在 Java 代码中的使用给出代码示例(下面的项目将在上一个示例:grpc-j.
2021-03-26 00:49:46 1713
原创 【GitHub Desktop】提交提交时 出现 Authentication failed 错误
修改 repository settings 或者登出账号重新认证博主今天从 github desktop 上提交代码时,出现:Authentication failed. You may not have permission to access the repository. Open options and verify that you're signed in with an account that has permission to access this repository通过查.
2021-03-21 20:44:58 2062
原创 grpc-java springboot 同步异步调用 demo
近期学习 grpc-java,从 demo 入手,进行学习grpc 的基础知识暂不整理,后续有时间再整理一波,这一篇主要是记录一个简单的 grpc 使用 springboot 创建的 demo。我整个 demo 分成三个 Project :grpc-springboot-demo-api:用于存放 proto 文件grpc-springboot-demo-server:服务端编码grpc-springboot-demo-consumer:客户端编码demo-api(proto)创建一个.
2021-03-21 20:34:59 2493
原创 grpc-java 源码阅读环境搭建
IDEA 版本 2018.3,grpc-java 版本 Tag-v1.31.1 ,gradle-5.6.1前期准备grpc-java tag 下载路径:https://github.com/grpc/grpc-java/tagsgradle 配置为国内镜像:https://blog.csdn.net/lj402159806/article/details/78422953代码构建导入代码,这里通过本地已有的 gradle 进行导入,grpc-java Tag-v1.31.1 默认的 gradl.
2021-03-15 23:07:22 578
原创 Dubbo 负载均衡算法
基于dubbo v2.7.8博主在学习自己部门的 rpc 框架时,发现在负载均衡算法上,其参考了 dubbo 的 RandomLoadBalance 算法,故对 dubbo 源码进行学习。dubbo 提供了RandomLoadBalance的负载均衡算法,该算法会从服务列表中,随机选择出一个 invoker,来处理后续的请求。而对于随机选择上,dubbo 采用权重计算随机的方式。代码具体思路:计算每一个 invoker 的权重判断是否每一个 invoker 的权重相同,如果所有 inovke.
2021-02-20 23:03:44 299
原创 IDEA 常用设置【更新ing】
调整菜单栏字体大小File -> Settings -> Appearance & Behavior -> Appearance
2021-01-18 23:33:37 238
原创 【Git】分支切换时内容未提交
按照对git分支的理解,但我在分支1修改内容,然后切换到分支2,分支1上修改的内容,分支2中应该是看不见的。但实践表明,只有当分支1修改的内容已提交,该结论才会成立,对于在分支上未提交的内容,切换分支时,会被带到新的分支。这里做个小示例验证:先初始化仓库,同时提交一个初始文件,文件内容:[0] start直接创建新的分支branch-1,并切到新的分支,编辑文件,新增:[1] update in branch-1的内容。此时切换回master分支,发现,我们在branch-1分支上修改的内容,并
2021-01-09 13:39:54 1575
原创 【Cassandra】查看键空间,表,列的创建时间戳
cassandra中查询键空间,表,列的创建时间方法cassandra中默认有键空间system,该键空间中的表会记录该集群的相关操作信息,例如其他键空间的记录,表的记录,列的记录,我们可以通过这些记录写入的时间(writetime),来获取这些键空间,表,列的创建时间。示例如下,先创建好测试用的键空间与表:此时我们查看system,我们此时需要关注的有:查看schema_keyspaces,我们能获取键空间相关的信息:select * from schema_keyspaces wher.
2020-11-03 20:53:43 1073
原创 【Git】常用指令整理
1. 设置签名1.1 项目级别/仓库级别git config user.name xxx:设置用户名git config user.email xxx:设置邮箱账号签名存放位置:./.git/config1.2 系统用户级别git config --global user.name xxx:设置用户名git config --global user.email xxx:设置邮箱账号签名存放位置:~/.gitconfig项目级别的优先级大于系统用户级别,如有项目级别则采用项目级别,
2020-09-26 23:15:42 306
原创 【Java】Mockito捕获多次调用的方法的参数
整理Mockito结合ArgumentCaptor捕获多次调用的方法的参数今天在对业务代码进行开发时,发现需要捕获多次调用的方法的参数,验证参数传递的正确性,这里对获取方法进行总结。首先,模拟一个简单的测试场景,有一个对外提供服务的类:@Componentpublic class CaptorLearning { private DalService dalService; @Autowired public CaptorLearning(DalService dal.
2020-09-15 22:09:38 3888
原创 【Spring Boot】5. @ConfigurationProperties(prefix=xx) 单元测试注入
springboot单元测试中,@ConfigurationProperties(prefix=“xx”) 注入今天在对写单元测试时,发现用@ConfigurationProperties(prefix = “xx”) 注入配置的类,无法获取到配置的内容,简单模拟一下:首先是配置类,通过@ConfigurationProperties注入配置,生成两个Bean,用于标识不同的信息模块。@Configurationpublic class MsgTemplateConfig { @Bea.
2020-09-10 20:55:57 2398
原创 【Java】异步回调方法进行单元测试
使用 ArgumentCaptor 对异步回调的方法进行单元测试背景博主在近期工作中,对模块进行异步化修改,主要进行RPC调用时,不再进行同步等待。对代码完成修改后,需要进行单元测试覆盖,其中就包括了异步回调的单元测试覆盖。由于涉及业务代码,这里对场景进行简化,即需要对异步回调的场景进行单元测试。这里通过代码模拟一个简单的场景:首先是有一个接口类IAsyncHanlder的接口,定义了onSucess方法。public interface IAsyncHandler { void onS.
2020-08-16 14:10:31 2047
原创 【Cassandra】删除机制 & 墓碑清理
对Cassandra删除机制和墓碑清理的学习笔记删除机制Cassandra的删除机制,实际上是一个插入操作,即不是真正的执行一个delete语句,而是执行一个update语句改变某个列的值。Cassandra采用在删除时,会执行一个update语句,在对应值上放置一个墓碑(tombstone),标识该列已经删除。等到执行合并(compact)时,就利用这些墓碑来删除SSTable中的相应的数据。而采用这种墓碑机制的原因在于:Cassandra会将同一份数据存放到多个副本不同的节点上,如果某个节点.
2020-07-28 20:32:03 2585
原创 【Git】本地提交账号密码输入错误如何修改
windows下,Git本地提交远程仓库时输入账号与密码错误,但第二次提交时默认使用上一次的账号与密码,博客将提供一种解决方法因为新购置了电脑,需要重新配置git,第一次在本地提交到远程仓库时,就敲错了密码,git提示:敲错密码就重新输入嘛,但是当第二次提交的时候,发现并没有出现提示框让我去输入账号与密码,说明系统自动保存了账号与密码,需要进行修改。后面发现,windows系统在:控制面板 -> 用户账号 -> 管理管理器 -> Windows凭证 这个路径下,可进行修改:.
2020-07-05 15:56:01 1088
原创 【AWS】NoSuchFieldError: SIGNING_REGION
Exception in thread “main” java.lang.NoSuchFieldError: SIGNING_REGION近期在工作中,使用AWS提供的SDK包从S3桶下载文件时,遇到了如下的异常情况:当时pom文件配置为: <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</ar.
2020-06-25 16:21:19 2073
原创 【Spring Boot】4.条件化Bean 根据配置文件加载对应Bean
根据配置文件只加载指定的Bean,条件化Bean近期在工作中遇到实际问题:在不同的环境中,需要加载不同的工具类。这个就可以使用到Spring的条件化Bean。话不多说,直接上代码。例如,当前对于IService接口:public interface IService { void test();}有两个不同的实现类:public class AwsServiceImpl implements IService{ @Override public void test.
2020-06-24 22:55:03 5164
原创 IDEA 常用快捷键总结 【更新ing】
常用 IDEA 快捷键总结,基于 IDEA 2017.3.2 版本,Ctrl + f 查询关键词类图相关生成类图:Ctrl + Alt + u 或 Ctrl + Shift + Alt + u两个快捷键的差距,在于前者以弹出式菜单显示,而后者以窗口的形式,使用方式都是选中需要生成类图的类,再使用快捷键,如图:...
2020-05-11 23:45:06 272
原创 【Spring】源码阅读环境搭建
文章基于Spirng-Framework-4.3.7,Gradle-4.7,JDK-1.8.0_1521. Spring源码下载首先需要到github上下载所需要的Spring框架的源码,但由于整个包相对比较大,如果没有梯子,可以到码云上进行下载镜像,链接:https://gitee.com/mirrors/Spring-Framework2. Gradle安装由于Spring使用Gradle构建工具,因此需要先下载Gradle,并配置环境变量。下载地址:https://gradle.org/.
2020-05-10 11:30:01 252 1
原创 【LeetCode】130. Surrounded Regions【Medium】【JAVA】
1. 题目2. 题意图形中有两类字符,'X',‘O’ 两种字符,如果 O 被 X 包围住,则需要将 O 转为 X。3. 思路我们需要将被包围住的 O 去除,这个其实比较麻烦,因为需要确实四周都是 X,这里采用一个相反的思路,即我们将不被包含的字符 O 进行标记,剩余没有被标记的 O,全部置为 X 即可。而我们如何确定字符 O 没有被包围?我们通过观察,可以知道,与边有接触的 O,即为不...
2020-04-24 23:10:58 236
原创 【LeetCode】Best Time to Buy and Sell Stock Ⅰ、Ⅱ、Ⅲ【Java】
121. Best Time to Buy and Sell Stock题意为只可买入一次,并卖出一次,要求获取的利润最高。最简单的思路就是两层循环,比较每一个数与后面的数的差值,以求出当前能获取的最大差值,即为最大利润,算法的时间复杂度即O(n²)。我们可以考虑优化算法,我们每获取一个数时,我们其实只需要跟这个数之前最小的那个数做比较,就可以知道这个为出口时,能获取的最大利润值,再通过比较所...
2020-04-04 15:03:49 289 3
原创 【LeetCode Top 100】406. Queue Reconstruction by Height【Medium】【JAVA】
1. 题目2. 题意有 n 个 (h, k) 对,h 代表高度,k 代表这个对在队列中的位置,在它的位置前面,有 k 个对的高度,比它高或等高。例如 (7, 0),代表其高度为 7,在它前面有 0 个高度不小于它的对。(4, 4) 代表其高度为 4,在它前面有 4 个高度不小于它的对。3. 思路这道题,官方的提示是:让你去找出最小高度的数的位置。首先,我们先假设没有相同高度的对存在...
2020-03-22 00:40:20 254 2
原创 【Cassandra】查看列的时间戳
列是 Cassandra 数据模型中最基本的数据结构单元,每次向 Cassandra 写入数据时,会为更新的各个列值生成一个时间戳。如果多个写操作同时修改同一个值,则 Cassandra 内部就会使用这些时间戳来解决冲突,我们可以通过 writetime(column) 指令来查看相应的时间戳信息,下面是详细的操作:首先我们先建一张临时表,有三个列,当前表中没有数据通过 INSERT 语句,...
2020-03-19 22:44:23 1631
原创 【LeetCode Top 100】56. Merge Intervals【Medium】【JAVA】
1. 题目2. 题意题目很好理解,就是输入多个时间碎片,现在需要尽可能把碎片进行合并,求合并后的结果。3. 思路一个比较容易想到的思路,维护一个当前的合并之后的时间碎片组,通过遍历所有的时间碎片,不断向合并之后的时间碎片组加入新的时间碎片,并将其进行合并整理即可。最佳的时间复杂度为O(n),即每次加入的碎片都可以进行合并,维护的合并之后的时间碎片组永远只有一个碎片。最差的时间复杂度为O(...
2020-03-14 00:48:53 309
原创 【JAVA基础】重复使用同一输入流
博主在工作中遇到问题:需要对读入的文件 (MultipartFile) 计算 MD5,同时又需要将其上传到 S3上,即需要对同一输入流进行操作,但是按照流本身所代表的抽象含义,数据一旦流过去,就无法被再次使用。这里给出三种解决的方法:1. 将输入流转换为文件这种方式最容易想到,既然需要多次使用,就可以将流转为文件,写入磁盘中,需要的时候再从磁盘读取文件,缺点在于从磁盘写入和读取较为耗时。代码如...
2020-03-10 00:26:39 1257
原创 【Spring Boot】3.@RequestParam和@RequestBody的不同&用法示例
1. @RequestParam该标签用于接受请求头中的参数,该标签配置了四个参数:public @interface RequestParam { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolean required() defau...
2020-02-25 01:04:15 1077
原创 IDEA 设置Maven路径 对当前项目生效 && 永久生效
IDEA中,Maven文件的配置一般默认在C盘,但我们不希望将jar包存放到C盘中,因此需要对Maven文件的配置进行设置。1. 对当前项目生效路径:File ==> Settings ==> Build,Execution,Deployment ==> Build Tools ==> Maven修改如下图,黄色方框圈出的部分,Maven home directo...
2020-02-24 23:13:56 5391
原创 【LeetCode 1358】Number of Substrings Containing All Three Characters【Medium】【JAVA】
1. 题目2. 题意题目几个关键信息:该字符串只包含’a’,‘b’,'c’三种字符示例1中发现对于相同但是位置不同的子串,是按两个结果计算,无需去掉重复该字符串长度默认大于33. 方法3.1 思路最简单的思路就是暴力法,直接两个循环,并判断结果字符串是否都包含了’a’,‘b’,'c’三种字符。但该方法时间复杂度较高,O(n²),因此考虑有没有简单的做法。题目是求符合条件的子...
2020-02-23 11:44:44 278
原创 【LeetCode Top 100】48. Rotate Image【Medium】【JAVA】
1. 题目2. 题意题目很好理解,即将一个矩阵旋转90度,这里要注意是顺时针旋转,不能搞混旋转的方向。3. 思路旋转4. 代码5. 运行结果6. 相关链接本题代码的github链接其他 Top 100 Liked Questions 题目...
2020-02-01 19:08:31 194
原创 【LeetCode 45 55 1306】Jump Game I,II,III【JAVA】
跳跃游戏,合计三道题。55. Jump Game1. 题目运行结果45. Jump Game II1. 题目:运行结果运行结果1306. Jump Game III1. 题目运行结果
2020-01-18 11:46:38 299
原创 【LeetCode Top 100】287. Find the Duplicate Number【Medium】【JAVA】
1. 题目2. 题意题意较为容易理解,即有一个找出重复数。3. 思路如果可以使用其他额外空间的话,可以直接用另外一个数组进行记录,或者使用HashMap来记录各个数值出现的次数,但该题目要求只能使用额外O(1)的空间,所以我们应该考虑如何通过修改原有数组的值来记录数值出现的次数。第一种思路可以直接进行排序,最终遍历排序结果,看哪个数值有两个相同的值相邻,即为重复的值。第二种思路,由于...
2020-01-16 23:19:15 193
原创 【LeetCode 1305】All Elements in Two Binary Search Trees【Medium】【JAVA】
1. 题目题目链接:https://leetcode.com/problems/all-elements-in-two-binary-search-trees/2. 题意题目要求是合并两个搜索二叉树,合并成为一个List3. 方法3.1 思路比较简单的做法,由于两棵树都是二叉搜索树,通过中序遍历,输出有序的数组,再将两个数组进行合并,时间复杂度上为O(n)。3.2 代码 p...
2019-12-29 16:33:40 237
原创 【LeetCode Top 100】448. Find All Numbers Disappeared in an Array【Easy】【JAVA】
1. 题目2. 题意题目很好理解,需要注意的是范围是[1,n],跟数组下标范围[0,n-1]刚好相差了1。3. 方法一3.1 思路由于数字范围刚好大于数组下标范围1,最简单的思路,构造一个大小为n的boolean类型的数组boolean[] isContain,isContain[i]代表数组中是否包含了数字i+1。从头到尾遍历整个数组,对每个值val,将isContian[val-1...
2019-12-23 00:39:53 179
原创 【LeetCode Top 100】647. Palindromic Substrings【Medium】【JAVA】
1. 题目2. 题意题目比较好理解,即计算出有多少个回文子串,同时位置不同的相同回文子串,将被视为两个。3. 思路3.1 思路一因为位置不同的回文子串需要被重复计数,比较简单的想法,就是将所有的可能的组合都列出来,并判断每一种是否是回文子串。这样代码思路比较简单,但运行时间一定是较长,根据这个思路可再进一步简化。对于回文子串的判断,我们一般简单的办法是从中间向两边进行扩展,即对于a,...
2019-12-19 23:10:35 167
原创 【LeetCode Top 100】49. Group Anagrams【Medium】【JAVA】
1. 题目2. 题意对输入的N个字符串进行分组,分组的依据为:同组内的字符串拥有相同的字母组合,排列顺序可以不同。3. 思路3.1 思路一分类可以想到的就是Map这个数据结构,可以通过特定的Key值,将不同的元素放入到不同的key下进行分类。而我们分类的依据是字符串拥有相同的字符组合,但顺序可以不同,那我们可以考虑将字符串字符组合的调整顺序,都是升序排列,得到的新字符串可以做为对应组的...
2019-12-08 01:40:42 202
原创 【LeetCode Top 100】11. Container With Most Water【Medium】【JAVA】
1. 题目2. 题意题目的意思是一个数组,数组的每个值代表一个柱子的高度,求所有柱子两两组合中,两个柱子跟x轴组成的区域最大容纳水的量。转换为数学关系就是所有垂直x轴的线段两两组合,每个组合的值为两个线段之间的距离与两条线段中较短线段的乘积。3. 思路最容易的思路就是,将所有的情况进行遍历,即循环遍历每种情况,暴力法求解,时间复杂度为O(n²)。然后我们考虑如何降低时间复杂度,我们可以考...
2019-12-07 20:30:06 174
原创 【Spring Boot】1.简单Spring Boot应用启动Demo & 启动类扫描范围
创建简单的Spring Boot应用,可以直接创建Maven项目,拉入对应的依赖包即可。下面展示Spring Boot 1.5.x版本的简单Demo代码:1. 创建Maven项目一路Next,填写相关信息即可。2. 完成pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://mave...
2019-11-25 22:43:17 408
原创 【LeetCode Top 100】2. Add Two Numbers【Medium】【JAVA】
2. Add Two Numbers(Medium)题意:即两个链表代表两个整数,相加的结果也放到一个链表中。思路:本题虽然是中等难度,但相对容易。对于两个整数相加,我们正常的做法就是列竖式,从低位开始相加,到高位,超过十则向前进一。而链表刚好是从数的低位指向高位,因此只需按照正常两个数相加的方式,从低位(即链表头)进行相加的方式进行,只需注意进位的情况,以及最后可能数位会长于两个加数的情...
2019-10-28 22:46:45 210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人