后端
文章平均质量分 80
Ch.yang
try{ coding } catch { bug }
展开
-
【Slf4j】项目中使用 slf4j 的好处
背景项目依赖了三方包,三方包有日志打印的代码。需要将三方包的日志打出来。问题是怎么做到项目的日志格式和依赖中的日志格式保持一致的?结论查阅资料后,发现是slf4j帮忙做了桥接。这里做下记录。原创 2024-08-04 18:30:04 · 267 阅读 · 0 评论 -
【Log4j2】log4j-users-guide 官方文档阅读笔记
原文Apache Log4j 官方文档 pdf需求将指定包目录的日志打到指定文件中将ERROR日志单独打到指定文件中目标理解 log4j2 的架构,理解并编写配置文件,完成需求。原创 2024-08-02 18:52:02 · 744 阅读 · 0 评论 -
【Java】pcm 与 wav 格式互转工具类 (附测试用例)
语音引擎只认 pcm 格式数据。前端只认 wav 格式 。需要后端对 pcm 和 wav 格式实现互转,特此编写工具类,并提供测试用例。原创 2024-06-23 18:21:50 · 403 阅读 · 0 评论 -
【Python】Python 2 测试网络连通性脚本
最近在只有python2的服务器上部署服务,不能用三方类库,这里出于好奇心学习下python。这里简单做个脚本,实现了检验网络连通性的功能(类似于curl)。原创 2024-06-12 23:57:45 · 623 阅读 · 0 评论 -
【Java】IdentityHashMap 的使用场景
最近有兴趣看一下 Druid 连接池怎么做连接管理的,看到一个类,这里记录一下使用场景。原创 2024-05-27 19:53:13 · 352 阅读 · 0 评论 -
【Spring】通过Spring收集自定义注解标识的方法
需求:用key找到对应的方法实现。使用注解的形式增量开发。任意时刻都能通过key来进行依赖查找@TestAssert.notNull(myBeanFactory.getMethod("key1"), "key1对应的方法不能为空");声明自己的类注解,并要求被 Spring 收集声明自己的方法注解,确保可以通过反射获取借 Spring 的能力,容器启动收集bean完成后,把bean列表交给自己,用于自己的收集策略。原创 2024-03-31 20:13:31 · 584 阅读 · 1 评论 -
【Linux】日志命令行练习(持续更新)
公司生产问题需要登录堡垒机排查。由于没有日志平台,但是生产问题要求相应迅速,这里积累下常用的命令。原创 2024-02-21 12:36:44 · 533 阅读 · 0 评论 -
【Linux】主机搭建 Linux服务器环境 笔记
过年买了个 mini 主机当玩具玩一下,这里记录下。原创 2024-02-19 16:47:12 · 638 阅读 · 0 评论 -
【笔记】Spring Boot 历史官方文档学习(持续更新)
Spring Boot 2014正式发布1.0版本,距今已经快10年了。看历史官方文档了解重点feature, 帮助自己建立知识网络。与Spring 5 官网历史文档学习一样,尽量保证不误解文档作者的原意,不好翻译的会有原文摘录(包括一些专有名词),并辅以自己的理解。限于篇幅原因,只摘录工作中遇到过的或者是有兴趣的。原创 2023-09-05 21:51:00 · 572 阅读 · 0 评论 -
【网络安全】理解报文加密、数字签名能解决的实际问题
工作中重新接触了 【公钥、私钥、签名】的概念。抽空重新看了《计算机网络》和国外的小黑书,把这块基础知识再收敛一下。防止报文泄露防止报文被篡改实体鉴别端点鉴别防止重放攻击既然大报文消耗性能,能不能把报文弄小?思路其实就是摘要算法,常见的md5、sha-1就是摘要算法(也叫散列算法)。程序中的应用// 把签名拼接到密文后面,接收者再解析出签名,验签即可 密文 . 签名。原创 2023-08-26 14:27:03 · 2274 阅读 · 0 评论 -
【Spring MVC】获取 @RequsetBody 标识的对象,使用适配器模式增加代码可读性
思考用 AOP 把校验代码实践用 Spring MVC 的 RequestBodyAdvice 做AOP逻辑继承 RequestBodyAdviceAdapter 实现自己的 适配器用自己的适配器让代码可读性增加熟悉 Spring MVC 、Java 反射的一些实践本文内容澄清一个AOP校验JSON内容的思路复习适配器模式。原创 2023-06-19 23:06:03 · 1936 阅读 · 0 评论 -
【MyBatis】RC隔离级别下,MyBatis 一级缓存、二级缓存造成的不一致情况
数据库的MVCC 及 锁机制保证了数据的隔离、一致性。而建立在数据库之上的缓存,都会破坏掉数据库的一致性保障。本文探索在RC隔离级别下,MyBatis 一级缓存、二级缓存造成的坑。顺便复习一下 Spock 的用法,更加体验到了 Groovy 清爽的语法。本文内容的代码仓(分支L1Cache 、L2Cache )MyBatis 官网缓存部分体验一下 Spock 的一个测试用例 (本文与Spring Boot 进行集成)def "RR环境下, 缓存不影响结果"() {原创 2023-01-11 21:11:01 · 1041 阅读 · 0 评论 -
【Log4j2】开发环境配置日志策略打印完整MyBatis语句到文件
公司项目用的 Spring Boot,选用的是 Log4j2 作为日志实现,本地开发的时候没有把sql语句打印到文件中,并且控制台输出的sql需要自己拼接,看了log4j2官网后整理了个日志文件demo实现自己的需求。Logback作为 Spring Boot自动装配的默认实现,所以选用Log4j2 记得要排除掉默认依赖。原创 2022-11-17 21:42:56 · 2283 阅读 · 0 评论 -
【Logback】开发环境怎么组织xml文件构建日志策略
思路:官网学习,官网有大量的配置例子,并且都会给出解释需要前置知识:了解 Spring Boot 的依赖结构、门面模式最好了解:Spring MVC 的工作原理,可以类比理解slf4j学习demo放到文末了(github)原创 2022-11-13 11:55:35 · 471 阅读 · 0 评论 -
【高并发基础】Cache Aside 缓存模式背后的思想
凤凰架构》一书中介绍了一种缓存实现方式 —— Cache Aside。大部分业务开发,不需要缓存与数据库的强一致性,Cache Aside 应该是首选方案。下文根据书中的内容进行整理及理解。文末会给出 Cache Aside 模式的应用。原创 2022-10-27 00:09:57 · 1385 阅读 · 0 评论 -
【Linux】《Linux命令行与shell脚本编程大全》阅读笔记
Linux内核 + GUN实用工具(一直在发展,且有多种实现) + 图形化界面Linux 不等于免费Debian、Red Hat Enterprise 就为商用版本特定用途的 Linux 发行版Ubuntu ,学校和家庭免费Fedora, 企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行CentOS,企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行运行交互命令的软件可以简称CLI。原创 2022-10-07 16:57:35 · 546 阅读 · 0 评论 -
【Groovy】《Groovy in action, Second Edition》待研究基础知识及技术实现
【代码】【Groovy】《Groovy in action, Second Edition》待研究基础知识及技术实现。原创 2022-09-24 12:10:44 · 254 阅读 · 0 评论 -
【Jenkins】windows构建自动化部署demo
Jenkins 工作中主要用在Linux 系统上。目前只是 自己本地开发玩玩CI/CD,所以先在windows上跑个demo。原创 2022-10-05 09:50:13 · 1264 阅读 · 0 评论 -
【架构】评分较高的三本微服务书籍的阅读笔记
凤凰架构》《微服务设计模式》《微服务实战(第二版)》《数据密集型应用系统设计》《网络是怎样连接的》《计算机网络》从宏观上看,微服务都是重构出来的,所有作者都不建议一上来就把项目搭建成微服务。这种基于重构来搭建微服务的指导思想是要明确知道微服务解决单体的缺点时,同时也引入了风险和挑战,当微服务的风险和挑战大于单体架构时请谨慎。当微服务的收益大于单体架构时,需要遵循一些设计原则甚至是必备的组件。。............原创 2022-07-23 17:10:56 · 2375 阅读 · 0 评论 -
【Spring Boot】spring-boot-starter-web 如何完成自动装配
参考官网:理解能够自动装配的bean一个最简单的 项目启动 —— 自然退出,“啥也不干”每次运行项目都执行 避免 有旧依赖引入的类3. 找到 的类pom文件声明为web项目3.1. 怎么找? 那么就找到 模块下的 包。找一个的子包下的任意一个类。现在取当pom.xml引入以下依赖启动时满足装配要求,实现装配。通过引入依赖就让项目拥有监听端口的能力(变成web)项目,这个特性就是自动装配。借官网的片段,总结下其他要注意的规范:.........原创 2022-07-10 00:56:16 · 836 阅读 · 0 评论 -
【安全】 阅读 RFC6749 及理解 Oauth2.0 下的授权码模式
规范来自 RFC6749。看了《Spring 微服务实战》对OAuth 2.0 的介绍后还是觉得存在一些翻译的问题。现在结合一起重新梳理下。RFC6749 定义 OAuth 2.0 目前只建立在HTTP协议上。并多次提到可以交给浏览器扮演,授权码模式十分适合有独立服务器的Web 服务器。从 来看从 的角度看从行业规范看拉文档里的图,现在把当作浏览器4.1. 用户委托浏览器,向微信发起身份验证的GET请求Note: 并没有规范黑色线的具体实现,但是规定了红色线提交参数的具体要求4.2. 微信确认身份原创 2022-07-08 15:00:01 · 2468 阅读 · 0 评论 -
【Docker】Maven集成Docker插件后的命令行笔记
整理至《Spring 微服务实战(第二版)》分类命令行以 打头的属于原生docker支持命令行以 打头的属于maven 集成 docker 后的打包能力,其中还需要docker的规范支持运行docker镜像随笔 的好处:原创 2022-07-06 16:36:11 · 445 阅读 · 0 评论 -
【架构】为什么需要主从复制与分片
前言《数据密集型应用系统设计》这本书花了大章节讨论分布式所存在的坑及解决方案,并放大了分布式系统中产生的原创 2022-03-19 15:06:37 · 3580 阅读 · 0 评论 -
【Java】Java8特性官网学习之Stream的前世今生
前言最近看了《数据密集型应用系统设计》,间断介绍了命令式语言和声明式语言的区别介绍了UNIX的 设计哲学MapReduce编程框架数据流引擎函数运算符(函数式编程)能发现Java8 Stream的语法都有上述内容的影子,本文旨在了解了流式编程技术发展和迭代关系,把零散的信息整合成网状信息,加深对Java8 Stream的理解。1. 命令式语言和声明式语言命令式语言 public static List<String> getSharks(List<String&原创 2022-03-13 19:16:15 · 1405 阅读 · 0 评论 -
【Java_jvm】Window下查看本地JVM类的实例数量及占用内存
1. 导出dump文件1.1 获取PID(两种方式)可以使用任务管理器获取也可以使用jconsole间接获取在jdk的bin 目录下找到jconsole.exe 执行即可如果看不到本地进程、文件权限可能存在问题解决:先通过本地java代码运行:System.out.println(System.getProperties());查看属性java.io.tmpdir=C:\Users%USER%\AppData\Local\Temp注: 此处%USER%为变量代表操作系统用户原创 2020-10-22 21:34:00 · 4406 阅读 · 3 评论 -
【Elasticsearch】ElasticsearchTemplate 拼接DSL时,debug查看最终语句
前置基础知识慕课教程该教程会有讲到如何打印拼接而成的普通的DSL语句ElasticsearchTemplate.queryForpage(…)类似于JdbcTemplate,sql语句的拼接是在方法内部的但是ElasticsearchTemplate 不提供日志打印的功能,只能debug进内部执行语句debug步骤定位语句拼接逻辑的方法SeachQuery 通常是使用业务逻辑bu...原创 2020-03-07 21:41:24 · 1495 阅读 · 0 评论 -
【Elasticsearch】模仿淘宝,将搜索框的业务逻辑抽象成DSL语句
目标提供一个搜索API就能兼容前端的各种查询需求环境ElasticSearch 5.6.8kibana 5.6.8需求界面根据用户点击,拼接用户的查询需求input:{ 1. 匹配查询: keywords: 商品名 , 不传入默认值为"烤箱 家用小烤箱" 2. 过滤查询(布尔查询): 匹配 c...原创 2020-03-07 21:11:55 · 979 阅读 · 0 评论 -
【Spring】SpringMVC 中 @ControllerAdvice的两种应用
SpringMVC 中 @ControllerAdvice的两种应用1. 异常处理 @ExceptionHandler1.1 全局异常处理@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody pu...原创 2020-02-26 17:03:56 · 310 阅读 · 0 评论 -
【RabbitMQ】@RabbitListener的使用及造成报错死循环的分析
问题复现:docker 下清空对应的队列信息exec rabbitmq /bin/bash #rabbitmq是容器名,也可以指定为Idrabbitmqctl purge_queue queue.order # queue.order是队列名RabbitMQ控制台新建消息,等待消费者消费http://localhost:15672前置知识:一、 @RabbitListener的使...原创 2020-02-10 18:27:03 · 13385 阅读 · 0 评论 -
【Linux】重启 Exited 状态的 docker 容器 bind: address already in use
查看docker 容器docker -ps -a重启docker 容器docker restart 容器ID(或容器名)报错: bind: address already in use查看端口号监听的进程, 获取pid,lsof命令的其他用法lsof -i:端口号或netstat -tunlp | grep 端口号根据pid杀掉进程,-9参数表示强力删除,其他...原创 2020-02-09 23:33:02 · 4501 阅读 · 0 评论 -
【Spring】Filter、Interceptor、Aspect的设计及区别
Filter、Interceptor、Aspect的设计及区别1) Filter定义基于Servlet架构,Spring无法控制,也无法拿到Spring控制的参数public class TimeFilter implements Filter { @Override public void doFilter(ServletRequest request, Se...原创 2020-01-30 23:37:25 · 1421 阅读 · 0 评论 -
【项目】Restful API 存在问号的情况解读,搜索业务相关
Restful API 基本规范GET user/1 获取id 为1的user资源POST user/1 创建id 为1的user资源PUT user/1 修改id 为1的user资源DELETE user/1 删除id 为1的user资源项目中用到的带?的URLGET user/1?name=zhangsan区别于GET user/1?name=zhangsan表示...原创 2020-01-27 16:27:43 · 1004 阅读 · 0 评论 -
【工具】idea 版本控制账号从github切换至码云
报错:Authentication failed for排查git中的账号信息git config --list ## 找到下列信息,去校验码云的账号信息user.name=jamesuser.email=xxx@xxx.com忘记账号,可以去码云查看或者绑定,绑定了github,直接用github也可以## 修改本地git的用户信息git config --global...原创 2019-12-11 20:42:40 · 780 阅读 · 0 评论 -
【java_多线程】模拟银行转账,为保证原子性而引发死锁,检测死锁并解决
前言本例子不是实际的生产模型,只是为了更好研究死锁而举的例子需求james 转账给 jay 20 元,需要保证转账过程原子性操作能加锁的前提每个对象都有一个monitor,用于维护自身的锁状态,换句话说,所有对象都可以作为一把锁每个用户的monitor就可以作为一把锁,并且这把锁是互斥的,暂且称作读写锁用加锁实现原子性锁规则每个用户都持有账户的一把读写锁,可以自己持有,也可以被...原创 2019-11-22 17:54:16 · 1367 阅读 · 0 评论 -
【java_多线程】让线程阻塞,获取其他线程的返回值 ,使用AQS组件实现
1. 传统方式 Thread.join() /** * 使用传统方式启动线程,执行任务,实现阻塞 * * @see Thread#join() * */ public static void main(String[] args) { Thread thread = new Thread(new Runnable() {...原创 2019-10-29 21:39:14 · 703 阅读 · 0 评论 -
【nginx】Linux上安装nginx,开放端口并部署静态网页
安装环境安装gcc,期间有提示,一律选y[root@james nginx]#yum install gcc-c++安装Nginx依赖环境,-y表示所有提示默认选择y[root@james nginx]#yum -y install pcre pcre-devel [root@james nginx]#yum -y install zlib zlib-devel [root@ja...原创 2019-10-27 20:54:55 · 2712 阅读 · 0 评论 -
【Linux】用户组、用户操作
Linux与用户相关的目录结构 /:根目录 root:超级管理员(root)的家 home:其他用户(普通用户)的家 etc:配置文件 usr:存放共享文件的(软件的安装路径) lib:依赖库Linux用户组和用户的概念基本概念用户分为 超级管理员 和 普通用户用户组 是用户的管理单元,一个用户至少属于一个用户组依赖关系超管 操作用户超管可以创建...原创 2019-10-27 19:27:56 · 489 阅读 · 0 评论 -
【java_基础深入】使用内省技术模仿实现BeanUtils
原BeanUtils出处import org.apache.commons.beanutils.BeanUtils;原BeanUtils常用法populate(Object bean, Map<String, ? extends Object> properties); // 传入Map参数注入bean public void getBean() { ...原创 2019-10-22 10:03:58 · 171 阅读 · 0 评论 -
【java_web】springboot2 + docker + mysql5.7.25 + idea部署至阿里云ECS
spring boot 2 docker mysql5原创 2019-05-31 00:05:55 · 421 阅读 · 0 评论 -
【MySQL】MyISAM 与 InnoDB 关于锁方面的区别
表级锁、行级锁MyISAM 默认是表级锁,不支持行级锁。 不支持事务InnoDB 默认是行级锁,也支持表级锁。支持事务,并支持自动提交。所以 InnoDB 在锁的粒度上更细一点。读锁和写锁MyISAMselect、insert 、delete、updateselect 默认上读锁,其他上写锁。select 也可以上 写锁select * from table for u...原创 2019-07-28 23:58:42 · 897 阅读 · 0 评论