工作
文章平均质量分 78
yysx
努力就有收获自信才有未来
展开
-
MacOS Monterey安装Redis6.2.6及BloomFilter问题汇总
背景我的系统是从10.12+直接升级到Monterey,所以个别常用命令无法使用。如果没问题,跳过就好。Redis6.2.6安装下载安装包并解压,执行make命令报错。xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun查阅资料得知,Redis6.0原创 2021-12-19 18:21:32 · 1413 阅读 · 0 评论 -
JOOQ-The easiest way to write SQL in Java
1、简介一个ORM框架,官方地址:http://jooq.org特点:方便、好用有强类型校验所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。2、基本使用基本环境:MysqlSpringBoot(1)引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-原创 2021-12-12 16:27:56 · 1246 阅读 · 0 评论 -
属性映射工具——MapStruct
一、简介一个属性映射工具。项目中各种实体之间会有很多转换,比如 vo、entity、dto、domain等。转换时需要写大量的get、set方法,冗长也工作量很大。再加上转换时可能还会有一定的业务逻辑处理,这会导致映射过程十分繁琐。本篇博客介绍的工具MapStruct,就可以很好地解决这一问题。二、实践实际应用场景主要分为以下几种情况:1、属性名相同无需处理,自动映射,类似BeanUtils。2、属性名不同需手动指定。3、属性值需额外的逻辑处理使用表达式引入逻辑处理。代码示例引入j原创 2021-11-20 14:36:54 · 881 阅读 · 0 评论 -
Jmeter基本使用
一、相关软件Jmeter:apache-jmeter-5.4.1监控插件ServerAgent:ServerAgent-2.2.3二、操作1、ServerAgent在服务器机器上操作,赋权限,启动。chmod 777 startAgent.sh./startAgent.sh注意:默认端口是4444,重启有可能会变,监听的时候要填对端口。2、Jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi使用命令 sh jmeter 启原创 2021-11-13 22:04:09 · 2662 阅读 · 0 评论 -
PHP笔记整理——基础语法
背景初步了解php语言的语法之后,将一些常用的写法和规则记录下来。php与java语法类似的部分,这里就不做过多说明。简介服务器脚本语言;跨平台;快捷高效。基本语法php文件使用以下标签,文件扩展名为“.php”<?php// 此处是 PHP 代码?>1、变量$变量以$开头,大小写敏感。 $totalPage = 0; $title = "abc";global在函数内访问全局变量$bool_test = false;function method原创 2021-11-07 22:05:04 · 181 阅读 · 0 评论 -
Redis基本数据类型应用场景及实现
本篇介绍的几种数据结构,虽然没有String使用的那么广泛,但他们有各自适用的场景。数据结构1、Hash用于存储对象。场景举例购物车,常用操作包括:1)往用户的购物车中添加商品2)增加某人购物车某件商品的数量3)删除购物车中指定商品4)获取购物车中商品总数5)获取购物车中所有商品对应命令如下:1)hset car-user1 product1 1hset key filed value其中key:car-user1,用来存储user1的购物车信息。2)hincrby ca原创 2021-10-31 22:33:39 · 472 阅读 · 0 评论 -
零拷贝技术
1、基本概念内核态和用户态Linux OS 体系架构分为内核态和用户态,也叫用户空间和内核。内核态:控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态:上层应用程序的活动空间,依托于内核提供的资源。二者关系:用户态(上层应用程序)通过系统调用内核态中的资源。DMADirect Memory Access 直接存储器访问,不依赖CPU大量中断负载。对比流程-图源网络。不使用DMA技术时:使用DMA后:使用了DMA技术后,CPU的工作量大大减轻,此时io操作已有所提升,原创 2021-10-24 15:31:38 · 336 阅读 · 0 评论 -
分布式锁Redisson
1、背景分布式锁需要达到的目标有:互斥 ( 不同应用之间、线程与线程之间互斥。)性能 (锁的粒度和范围都要尽量小,减少不必要的竞争。)锁的特性 (可重入锁;超时设置;锁判断等)2、实战引入依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId>原创 2021-10-02 10:41:10 · 332 阅读 · 1 评论 -
Mybatis-代码走查问题整理
实践篇1、#{}和${}的区别${}直接替换变量 (有sql注入风险),使用场景:当表名、字段名作为变量传入时。#{}(PreparedStatement) 预处理编译,先替换为? 然后赋值 添加单引号。2、使用注解和xml文件sql的方式区别?注解:简单明了,无需额外文件。但长sql格式不友好,且无法额外做if等逻辑处理。sql:能弥补注解sql的缺点,但对于不同场景下共用sql的情况,要处理好参数是否必须传入的问题。3、使用map接收结果集时,有时会遇到属性的类型与预想的不一原创 2021-09-27 14:40:03 · 376 阅读 · 0 评论 -
JVM窥探——G1收集器
在这篇博客《JVM(2)——GC算法和收集器》中,简单介绍了GC的算法和收集器。今天主要介绍其中的一种收集器G1。一、目标尽最大可能减少STW时间;GC停顿可控;不产生内存碎片和浮动垃圾。二、特点1、化整为零,引入region。RegionJava堆划分成多个独立区域Region,新生代和老年代也不再是物理隔离的,他们都是一部分Region集合。新增的Humongous区,专门用来存放临时的大对象。如下图:RSetRemembered Set,每个Region初始化时都会有一个RSet原创 2021-09-18 17:41:04 · 115 阅读 · 0 评论 -
Redis的事务和Watch机制
1、背景Redis version: 3.2.92、事务Redis的事务,可以理解成是一系列命令的打包操作。与传统事务相比,Redis的事务不支持回滚,若遇到错误,不影响其他命令的执行。符合Redis追求快速、高效的目标。当然,与此同时,也就无法做到严格的要么全部执行,要么全不执行。(1)常用命令multi exec discard 等multi:开启事务exec:提交事务discard:取消事务Tips:因“语法错误”导致的error,redis 事务不回滚,不影响其他命令执行原创 2021-09-15 10:36:47 · 389 阅读 · 0 评论 -
【Review】Mybatis-以PageHelper为例分析拦截器
1、背景大家都知道,Mybatis提供了接口绑定,实现了DAO与xml文件的绑定,无需编写实现类,更方便使用。但如果我们需要对某些语句进行额外的统一处理,且是在运行时动态修改,怎么办?比如分页,不希望每次都在sql中手动填充分页参数,能不能动态传递分页参数来实现?2、PageHelper以PageHelper为例,来看下他是如果使用拦截器对sql进行处理的。//其中,type:上面提到的四种拦截对象的类型。method:拦截哪些方法,因为是分页查询,所以只需要query即可。args:对应方法原创 2021-09-04 23:16:59 · 903 阅读 · 0 评论 -
【Review】Spring源码分析之bean加载
1、背景IOC容器,是Spring的两大特性之一。作为容器,他可以方便地管理bean,以及bean与bean之间的依赖关系。本篇文章,主要从源码角度介绍在ioc容器中,bean的加载流程。2、源码(1)容器的重要接口/类(2) Bean Definition入口:XmlBeanFactory 构造函数中调用 XmlBeanDefinitionReader的loadBeanDefinitions(resource)大致分为三个步骤:验证xml文件的正确性;加载xml,转为Document对原创 2021-08-30 14:43:56 · 110 阅读 · 0 评论 -
【Review】深入理解ThreadLocal(内存泄漏+线性探测)
1、简介线程内共享,线程间隔离。线程本地变量与lock相比:ThreadLocal:空间换时间Lock等:时间换空间2、实现原理1)ThreadLocalMap Entry[] table 环形数组2) Entry弱引用弱引用:GC时会被回收。key:ThreadLocal<?> value:Objectkey定位采用hash,碰撞后采用线性探测法,未再使用链表。private static int nextIndex(int i, int len) {retu原创 2021-08-21 18:04:53 · 716 阅读 · 0 评论 -
CGLIB动态代理原理分析
原理采用字节码技术,动态生成代理类,并在代理类中做回调处理完成方法增强。假设业务类User,我们现在要对其进行处理。CGLIB动态代理会生成User的代理类UserProxy,其中UserProxy继承自User。既然是继承,那么必然User的方法他也有,除非用final修饰。因此,我们可以在UserProxy中对User的方法做处理,实现代理的作用。实例现在通过代码看下:业务类Use...原创 2020-02-19 17:39:52 · 379 阅读 · 0 评论 -
Java反射——Proxy和动态代理
概述上篇文章《Java反射——Class和ClassLoader 》,我们简单介绍了反射的基本概念及相关类。这里介绍下,反射的一个主要应用——动态代理。动态代理JDKCGLIBAPI小结...原创 2020-02-04 11:30:58 · 665 阅读 · 0 评论 -
Java反射——Class和ClassLoader
这里写自定义目录标题概述特点场景API概述特点场景API反射相关的类主要在java.lang 和 java.lang.reflect包下。其中,java.lang下主要有以下两个。1、Class类是对象的抽象,Class就是所有类的抽象。也可以说,Class表示类的类类型。public final class Class<T> implements java.io....原创 2020-01-26 13:56:09 · 693 阅读 · 0 评论 -
《代码整洁之道》读书笔记
背景很早之前就接触过这本书,但当时比较热衷于看架构和设计模式之类的书籍,就把这本《代码整洁之道》排到了后面去看。也是因为从架构中能读懂很多思想和道理来,后又经人推荐,再次拿起这本书来仔细品味。内容整本书洋洋洒洒讲了17章内容,但总结起来,并没有那么复杂。我们还是从接触事物最初的方式来思考,即Why-What-How。如下图所示:1、Why-Why? -为什么要读这本书? -为什么我们需要编写整洁原创 2017-08-12 17:57:30 · 695 阅读 · 2 评论 -
Kettle Spoon入门教程
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。其中,Spoon是Kettle中的一个组件,其他组件有PAN,CHEF,Encr和KITCHEN等。Spoon通过图形化的页面,方便直观的让你完成数据转换的操作。1、安装配置点我下载最新版本是7.1,小编这里使用的是6.1。下载完毕后,解压即可。因为是Java编写的,需要jdk环原创 2017-09-05 17:13:12 · 60794 阅读 · 11 评论 -
使用freemark模板生成excel
1、背景文件操作中导入导出功能在项目中十分常见,这里我们要聊的是导出excel这一功能。老话题常谈常新,小编给大家介绍使用freemark模板的方式导出excel。2、实现Demo中采用springBoot+mybatis整合项目,其他项目配置类似。2.1 添加jarpom.xml中配置freemark所需的jar包,如下所示: <dependency> <groupId>org.spr原创 2017-08-28 14:52:36 · 1732 阅读 · 5 评论 -
Mac OS安装mysql教程
前两天为了开发方便,在自己电脑上装了一个mysql,发现Mac上的安装步骤中还是有些注意事项的,于是整理了这篇博客。1、下载进入官网www.mysql.com下载所需的mysql版本和安装包格式。 注:Mac需下载dmg格式文件。下载完毕后,点击pkg安装包,next进行安装。2、安装安装完毕后,进入系统偏好设置,找到mysql。 点击Start Mysql Server,显示启动成功。原创 2017-11-06 17:21:18 · 5443 阅读 · 2 评论 -
SpringCloud——Feign实例及原理
一、实例1、配置feign添加依赖在maven的pom中添加feign &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;groupId&amp;amp;amp;gt;org.springframework.cloud&amp;amp;amp;lt;/groupId&amp;amp;amp;gt;原创 2018-08-06 11:19:27 · 30924 阅读 · 6 评论 -
小谈加密算法
1、为什么要用加密网站中有很多类似金钱、密码等重要业务数据,一旦被监听、拦截,可能会造成严重的损失。 比如下图:我们可以很容易的看到某个请求的相关参数数据 2、应用场景加密算法有很多种应用场景,最常见的是用户登录、身份验证、验签等等。目的在于通过算法,将明文转换为密文。将明文转换为密文只是第一步,更深一步的做法是结合sessionId、随机数、token或者https等,最大限度的防止信息被盗取原创 2017-04-18 14:21:13 · 866 阅读 · 0 评论