- 博客(1387)
- 资源 (199)
- 收藏
- 关注
原创 双亲委派模型-java自定义类加载器
JVM预定义的三种类型类加载器: 首先classloader 分三个级别,最上级: bootstrap classLoader 中间级: extension classLoader 最低级: app classLoader.1.启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载...
2018-03-09 17:57:12 464
原创 HttpURLConnection 设置Host 头部无效
这个问题的起因是在使用FeignClient 设置header信息的时候无效@FeignClient(url = "http://localhost:8083", name = "demoClient")public interface FeignTest { @RequestMapping(value = "/hello", method = RequestMethod.GET, headers = "host=www.test.com") String hello(@RequestP
2021-11-17 16:57:49 2341
原创 springboot LocalDateTime 格式化问题
默认情况下,springboot 返回的 Date和LocalDateTime 格式是这样的2021-11-05T11:17:09也就是带有T的,但是我们很多时候不想要这个T这种情况网上有一种解决方法说的是配置JsonFormat @JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createdDate; @JsonFormat( pattern = "yyyy-MM-dd
2021-11-05 23:18:39 1202
原创 费曼学习法
费曼学习法-最高效的学习方法一句话总结:通过向别人清楚的解说某一件事情来确认自己是否真正懂了这件事。1.选择目标确定目标:比如一门技术、一门语言、一个概念等等掌握目标:看书、博客、视频、请教别人来完成目标2.教学教学方式:写作、录制视频、音频、直接跟别人讲记录问题:不清楚、不明白、模棱两可地方3.纠错学习解决问题:解决2中出现的问题,通过反复查阅资料、学习、强化记忆顺利教学:重复第二步教学直到可以实现本能式的教学4.简化简化教学:对学习内容进行提炼、简化、去除非必要的,
2021-06-10 19:50:24 1070
原创 java lambda 表达式实现原理
源代码public class LambdaTest { public static void printString(String str, Print<String> print) { print.print(str); } public static void main(String[] args) { printString("hello", s -> System.out.println(s)); }}int
2021-05-19 17:53:50 309 2
原创 时序图
代码sequenceDiagram participant z as 张三 participant l as 李四 loop 日复一日 z->>l: 吃了吗您呐? l-->>z: 吃了,您呢? activate z Note left of z: 想了一下 Note right of z: 又想了一下 alt 还没吃 z->>l: 还没吃呢,准备回去吃 else 已经吃了 z->>l: 我也吃了,哈哈 end
2021-05-14 16:50:23 254
原创 k8s部署实例无法启动情况总结
问题原因:健康检查失败在使用k8s进行部署springcloud项目的时候经常遇见一些服务无法启动的情况,只是因为服务的健康检查没有通过。这些健康检查包括 数据库、redis、apollo、kafka等等这些第三方的软件。具体定位方式:查看当前的服务状态:一般这个时候会报503错误,就是服务没有启动kubectl describe pod serviceName -n dev-phoenix解决办法:定位失败原因查看具体的失败原因需要进入docker里面去执行查询:kubectl exec
2021-03-23 17:30:44 1576
原创 mysql 优化-数据类型不匹配导致的全表扫描
一条sql执行时间特别长,很多时候页面都直接504 timeout,sql内容大致如下,其中a表的数据有2000w+数据,b表有600w+数据SELECT a.*FROM aWHERE a.user_id = 123AND a.id NOT IN ( SELECT b.pay_record_id AS pay_record_id FROM b WHERE b.user_id = 456)ORDER BY create_time DESC;本来这2条sql语句里面
2021-03-08 16:41:00 446 2
原创 学习新知识的正确方式
带着目标去学习首先我们学习知识的时候,第一步就是要明白这个知识的目的是啥?带着目的去学习才不会被文字符号或者是复杂的逻辑给蒙蔽了双眼。才能不至于淹没到知识的海洋中,不至于从入门到放弃。时刻都要想着目标,没有目标的学习就是浪费生命。接下来我们讨论一下学习中遇到的常见的具体问题。一个知识点牵扯到更多知识点我们学习知识会经常遇到自己不清楚,或者自己不是很明白的东西,而且在学习过程中新的知识又会牵扯出新的未知知识,如果我们遇到未知就去看结果往往像在一堆无序的绳子里面顺序往下找,最后连开始的目的都忘了。但是如
2021-02-20 23:24:53 274
原创 代码梳理之道:目标驱动
很痛苦,很纠结我们无论是在看别人代码,还是在研究源码的过程中都会面临一个基本的问题,那就是代码逻辑梳理,尤其是在代码比较复杂,或者是代码逻辑比较混乱的时候,问题更加明显。当我们梳理完这样的代码之后,我们的收获就是:乱。先不说代码那些框架里面的代码设计有很多,而且有的真的实现很复杂,不是一下子就能明白的。我们从最简单的入手:就说我们日常的代码维护和重构,因为这是我们平时遇到最多的情况了。就我们工作中遇到的代码来说,80%-90%的代码是没有设计在里面的。基本上就是流水账,这种代码其实逻辑并不复杂,我们之
2021-02-07 23:56:06 576
原创 DerInputStream.getLength(): lengthTag=111, too big.
在调用Apns推送接口的时候需要用到公钥和私钥,密钥文件统一放到项目src/main/resources的某个目录下,然后本地启动测试,启动过程中报错:DerInputStream.getLength(): lengthTag=111, too big.解决过程:把密钥文件存放到绝对路径下然后去加载结果正常,说明编译过程中密钥文件被修改了,所以解决问题的关键就是不要让maven打包过程中修改这个密钥文件。解决办法:1.非springboot项目<plugin> <gro
2021-02-01 12:18:59 9008 3
原创 docker nginx 代理宿主机服务
docker 的出现解决了我们很多问题,让我们避免陷入各种依赖安装的痛苦中,但是docker本身自己也有一些自己的规则,如果不知道也会让我们走很多弯路。最近在阿里云服务启动了一个nginx容器,在代理静态文件的时候都是正常访问的,但是在进行反向代理tomcat服务的过程中就一直报错:[error] 37#37: *5 connect() failed (111: Connection refused) while connecting to upstream, client: 111.199.4.122
2021-01-29 23:07:52 4420
原创 阿里云服务器装数据库
最近在阿里云服务器上安装数据库,数据库本身是通过docker创建的容器,用户名密码啥的都正常,但是就是登录不了。防火墙也设置好了,但是就是连不上。最开始一直在纠结防火墙的问题,试了各种方式都不行,而且端口telnet根本没反应。后来想是不是阿里云自己对端口有控制,于是从阿里云控制台找到配置规则,添加了数据库的3306端口,再连成功了!这个事情还是挺坑人的,如果想不到阿里云方面的控制,那么这问题就无解了。...
2021-01-29 22:46:26 308
原创 自定义拦截feign错误
定义Feign错误处理的Decoderpackage com.test.admin.util;import com.test.admin.util.exception.AdminFeignException;import feign.Response;import feign.codec.ErrorDecoder;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;@Slf4jpubli
2021-01-15 21:01:57 1379 1
原创 指定不加载框架的某些配置
有时候公司框架默认会加载一些配置,但是这些配置我们当前工程不一定需要,或者跟我们本身的功能有冲突,这个时候我们可以指定不加载这些配置# 不加载框架默认的配置spring.autoconfigure.exclude=com.xxx.AthenaFeignConfiguration...
2021-01-15 20:45:39 161
原创 统一打印FeignClient 日志
import com.rcplatform.athena.admin.util.FeignErrorDecoder;import feign.Logger;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * 打印feign log* @Author ztd*/@Configurationpublic clas
2021-01-15 20:41:11 947
原创 mysql join 相关例子
# 表a数据:mysql> select * from a;+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Pirate | 10 || 2 | Monkey | 20 || 3 | Ninja | 20 || 4 | Spaghetti | 20 |+----+-----------+------+# 表b数据:mysql
2021-01-12 14:45:54 258
原创 知识+场景=灵活运用
知识只有跟场景联系起来才能发挥它的作用,才可能实现对知识的灵活运用。知识脱离的真实的场景将会变得无比枯燥(因为知识仅仅是一堆符号而已)。仅有知识没有场景就会变成书呆子。学习知识一定要找到对应的使用场景:我们很难记住知识,但是我们很容易记住场景。举个简单的例子,同样是勺子,但是生活中有大勺和小勺,如果对于没有使用过勺子的人,你让他说出他们的区别,其实他能讲出来的很有限,无非就是大小的区别。但是使用过的人就会说我们把饭从锅里盛到碗里的时候用的是大勺,把粥从碗里喝到嘴里的时候使用的是小勺。如果没有这种使用体验我
2020-11-19 22:33:39 649 1
原创 maven 包依赖、包冲突分析
1.如果项目本身启动有问题,那么说明是编译有问题,执行如下命令来查看问题原因mvn clean package -DskipTests2.如果项目启动报了jar包依赖冲突,那么执行如下命令来查看当前项目有效的依赖mvn help:effective-pom > effective.txt当然也可以使用 idea maven 自带的工具:在 maven 模块下选中项目,右键选择 【Show Effective POM】3.根据冲突的 jar 包查找顶层引用,处理包冲突mvn depen
2020-09-16 18:15:42 461
原创 maven 定位失效的仓库
在我们开发过程中可能会遇到jar包下载不下来的问题,这个问题如果只是通过刷新 idea 的 maven 插件很难看出来是什么问题,最多就是看到我们依赖了某个仓库,而这个仓库我们链接不上,大致情形如下:其实我们已经知道,这个仓库目前已经不可以使用了,但是我们却不知道是哪里配置了这个仓库。这时候直接分析这个截图我们很难弄明白是哪里导致的问题,这时候我们可以通过执行 maven 的命令来看看到底是在获取哪一个依赖的时候出错了,maven会把详细的出错位置指出来供我们来分析问题。在 terminal 里面执
2020-09-08 12:56:25 267
原创 Nodejs 中通过 babel 来体验 es6 语法
Nodejs 中通过 babel 来体验 es6 语法1.安装依赖:npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/nodenpm install --save @babel/polyfill2.创建 babel.config.js 文件const presets = [ ["@babel/env", { targets: { edge: "17",
2020-08-09 19:44:15 506
原创 js格式化long类型的值为日期
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>js格式化long类型的值为日期</title></head><body> <
2020-07-24 22:49:52 300
原创 Maven 配置 Jacoco 插件,查看代码覆盖率
1、简介Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 JavaAgent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins 等。之所以在此引入 Jacoco 是因为在使用 Cobertura 的时候,不能完全的适配 Jdk 8 Lambda 表达式,而 Jacoco 可以适配。2.pom 文件中配置 Jacoco 插件<plugin&g
2020-06-10 14:23:21 3655
原创 vscode 调试 js
1.使用 chrome 调试页面这种方式其实不需要使用 vscode 来调试页面,vscode 只是我们的编辑器,我们使用 vscode 来编辑我们的页面,然后通过 vscode 在 chrome 中打开我的页面。步骤如下:1.安装插件:open in browser2.在要调试的页面上右键选择 open in browser其中第一个选项是在默认浏览器中打开,第二个选项是在其他浏览器中打开3.在 chrome 中打开开发者工具2.使用 vscode 调试页面使用 vscode 调试页
2020-05-25 23:01:45 2678 1
原创 通过跑步彻底搞懂CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch:这个类使一个线程等待其他线程各自执行完毕后再执行。CyclicBarrier:这个类使所有线程都等待完成后才会继续下一步行动。Semaphore:这个类是控制线程的并发数量。下面通过我们熟悉的跑步运动来做比喻,让你轻松的明白他们之间的差别:CountDownLatch例子:裁判等运动员package com.dada.test;import java.u...
2020-03-28 23:31:28 503
原创 volatile保证可见性不保证原子性
对于i++动作来说,只有getstatic和putstatic指令能保证是原子的,同步的,而其他几个指令都无法保证原子性,所以就会出现并发的数据安全问题。
2020-03-28 21:44:43 257
原创 jar包发布到maven仓库流程
1.在setting.xml文件中配置访问仓库的权限 <server> <id>snapshots</id> <username>deploy</username> <password>123456</password> </server> <server>...
2020-02-28 11:26:34 416 1
原创 定位java最耗cpu进程
1.定位最耗cpu进程1.通过jps命令来查找对应的java线程如果一个服务器上java进程很少,我们一眼就可以定位出这个线程。77 jar255 Jps2.通过top命令来查找cpu使用最高的线程如果一个服务器上有多个java服务,那么使用top命令对多个java进程进行观察,找出耗费cpu最大的进程,从下面可以看出是PID为77的进程最耗cputop - 14:21:59 up...
2019-12-30 22:32:35 536
原创 telnet检测指定端口是否可访问
1.首先安装telnetyum install telnet;2.使用telnet语法:telnet ip porttelnet 一个可以访问的端口示例:其中 ip 跟 port 之间是空格隔开,如果访问端口能通那么接下来可以通过 ctrl + ] 以及 quit 来关闭连接。~ telnet 10.120.128.136 8081 Trying 10.120...
2019-11-19 20:13:47 1194
原创 1.jvm内存模型
文章目录一、内存模型1.线程私有区:2.线程共享区:二、 详细模型1 程序计数器PCJava 多线程的实现:2 虚拟机栈1.栈帧(Stack Frame)结构:1.局部变量表:2.操作栈:3.动态连接4.方法返回地址5.额外附加信息2.异常(Exception)3 本地方法栈1.异常(Exception):4 Java堆1.新生代1.Eden Space(伊甸园区)2.Survivor Space...
2019-11-18 22:32:30 325
原创 20.慢查询定位
文章目录1.简介2.参数说明3.设置步骤4.测试1.简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。2.参数说明1.slow_query_log 慢查询开启状态2.slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)3.l...
2019-11-18 19:45:19 264
原创 19.分布式锁
文章目录背景分布式锁应该有的功能分布式锁的实现方式:1.基于数据库的表分布式锁1.1.实现逻辑1.2.创建表1.3.锁住方法1.4.当方法执行完毕之后,想要释放锁的话,需要执行以下Sql:1.5.数据库实现方式存在的问题1.6.面对上面问题的解决办法1.6.使用数据库锁的优缺点2.基于redis缓存实现分布式锁2.1.基于SetNX实现:2.2.实现代码2.3.优缺点3.基于zookeeper的分...
2019-11-18 19:43:38 200
原创 16.mysql 存储过程
1.存储过程1.创建存储过程#创建获取每一个元素的函数CREATE FUNCTION `func_get_split_string`(f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8BEGIN declare result varchar(255) ...
2019-11-08 19:25:24 172
原创 OAuth2.0 与 SSO
OAuth2.0简介:http://www.ruanyifeng.com/blog/2019/04/oauth_design.htmlOAuth 2.0 的四种方式http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.htmlGitHub OAuth 第三方登录示例教程http://www.ruanyifeng.com/blog...
2019-10-24 23:51:37 214
原创 mysql 面试题
文章目录1.索引相关1.什么是索引2.索引是什么样的数据结构3.Hash索引和B+树索引有什么区别或者劣势Hash索引的实现原理:B+树索引实现原理:区别:4.什么是聚簇索引5.非聚簇索引一定会回表查询吗6.建立索引有哪些需要考虑的因素7.联合索引是什么?为什么需要注意联合索引中的顺序8.创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因9.何时索引失效2.事务相关1.什么是事务...
2019-10-10 12:59:52 759
原创 hash冲突处理
通过构造性能良好的hash函数可以减少hash冲突,但是不可能完全避免冲突,因此解决hash冲突是hash算法的另一个关键问题。创建hash表和查找hash表都会遇到冲突,两种情况下解决冲突的方法应该一致。下面以创建hash表为例,说明解决冲突的方法,常用的解决冲突的方法包括四种:1.开放定址法:再散列法这种方法又称为再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,...
2019-10-08 20:18:46 460
原创 ajax 302 错误无法跳转
1.问题当cas登录失败之后如果继续执行ajax请求会报 302 重定向错误,但是因为是ajax请求,所以浏览器不会自动跳转,需要做处理。1.自己重写ajax方法:不推荐var Ajax = function() { var that = this; // 创建异步请求对象方法 that.createXHR = function() { if (wind...
2019-09-27 16:11:42 7120 1
dubbo 例子
2016-09-12
zookeeper 例子
2016-09-11
mdwiki 使用
2016-07-17
springmvc 参数绑定例子
2016-06-15
springMVC hessian
2015-12-09
chrome elasticsearch 插件
2018-03-12
react 计数例子
2017-06-29
springboot mybatis mapper.xml 配置
2017-06-22
springmvc ajax 文件上传
2017-05-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人