- 博客(52)
- 资源 (1)
- 收藏
- 关注

原创 MySQL优化
MySQL优化1、选取最适用的字段属性:MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。2、使用连接(JOIN)来代替子查询(Sub-Queries):使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且...
2020-03-16 14:54:09
1182
2

原创 JVM虚拟机(最详细的jvm总结)
我跟你讲一下我对于java的理解吧java最大的特点就是平台无关性,一次编译,到处运行。Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。其中导致这个特性最主要的原因就是java中的jvm虚拟机(引出jvm虚拟机教育他!)JVM是内存中的虚拟机,可以理解为,...
2020-03-05 13:10:36
952
2
原创 计算机流水线技术
把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构来负责执行,而这些执行机构可以同时并行工作。流水线需要有“通过时间”(第一个任务流出结果所需的时间),在此之后流水过程才进入稳定工作状态,每一个时钟周期(拍)流出一个结果。流水过程由多个相联系的子过程组成,每个过程称为流水线的“级”或“段”,一条流水线的段数,也称为流水线的“深度”或“流水深度”各个功能段所需时间应尽量相等,否则,时间长的功能会造成流水线的“堵塞”和“断流”,这个时间一般为一个时钟周期(拍)或机器周期。
2024-01-11 19:11:42
560
原创 java Mybatis if 标签 字符串判断不生效
因为mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'1’或’2’这种类的都会被解析成字符,而java又是强类型的,字符和单个字符串是不相等的,所以会导致两边的类型不相等,所以标签中的sql不会被解析同个。3.将字符换成Integer类型,在传递参数时就传递Integer类型,使用Integer类型进行判断。这个代码无论balance传递"1"还是"2",这个都不会生效,会直接略过这个if判断。1.将单引号换为双引号,把test的引号换成单引号,里面的判断换成双引号即可。
2022-11-01 11:33:53
1010
原创 TheardLoacl 详解
链接: https://blog.csdn.net/lufeng20/article/details/24314381.链接: https://www.jianshu.com/p/3c5d7f09dfbd.
2021-06-23 17:31:51
208
原创 Mysql 类型转换的坑
mysql 类型转化会导致 索引失效比如说 数据库存的是int 实际传的的 “1”类型转换会导致行锁升级成表锁这是mysql自己的规则
2021-06-23 17:29:15
219
原创 mybatis对象或数组转成临时表join
in数据太多导致查询延迟工作上跨服务调用传递的id数组 然后根据数组里的id 去in 一个表。618的时候发现查询老是超时。然后我这边准备优化对象入参变成临时表的方法一开始是想着把对象变成一个临时表 通过jion 连接去查询。找了一下发现可以用select 1,2,3 …这种该方法sql 的 select 可以指定常量,包括对象里面的数据。根据 mybatis 语法可以直接select #{字段名1} as amount,#{字段名2} as store_code 就可以转换这个对*象,代码
2021-06-16 16:33:06
5111
1
原创 java设计模式-策略模式
策略模式含义在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。原理策略模式定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。代码实现来玩一个僵尸的游戏 定个规则 僵尸有外貌 ,走路方式 ,攻击方式三种不用策略模式的代码package com.hxj.de
2021-05-06 15:47:06
188
1
原创 设计模式-装饰者模式
应用场景拓展一个类的功能或者给一个类添加附加职责的时候需要用到优点1.在不改变原有对象的情况下给一个对象拓展功能2.使用不同的组合可以实现不同的效果3.符合开闭原则javaapi 实现Servlet.Api;javax.servlet.http.HttpServletRequestWrapper原理装饰者模式就像拍个照 ,比如我想普通的拍个照,或者是加个滤镜,或者再加个图案,美颜等等。其用意就是不改变目标类的情况下,给目标类动态添加功能装饰者模式的四个角色抽象构件角色(
2021-05-06 14:16:17
124
原创 java设计模式-适配器模式
在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作适配器模式分为两种:对象适配器模式跟类的适配器模式类适配器模式类适配器模式 就是把适配器继承类 然后通过方法调用方法的方式改方法示例首先有一个已存在的将被适配的类public class Adaptee { public void adapteeRequest() { System.out.println("被适配者的方法"); }}定义一个目标接口pu
2021-04-29 19:53:21
100
原创 java设计模式-门面模式(外观模式)
现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其"分而治之",把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。门面模式做的就是这种事情,通过各种封装,让用户调一个接口就可以实现多样化的操作比如说用户下单 有 支付-扣减库存的操作 通过门面模式就可以让用户调用下单接口就可以实现 扣减库存以解一系列的
2021-04-28 16:01:41
158
原创 设计模式-建造者模式(build模式)
建造者模式又叫build模式定义将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示使用场景当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。解决什么问题比如说我们有这么一个类 其中的 productName是必须要的,其余参数是可选的,我们通常用两种方式实例化类并给他们的成员变量赋值 class Product { private final String productName; private final Strin
2021-04-28 15:42:08
2550
原创 为什么用Eureka不用ZooKeeper
为什么不应该使用ZooKeeper做服务发现【编者的话】本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验。本文虽然略显偏激,但是看得出Knewton在云平台方面是非常有经验的,这篇文章从实践角度出发分别从云平台特点、CAP原理以及运维三个方面对比了ZooKeeper与Eureka两个系统作为发布服务的优劣,并提出了在云平台构建发现服务的方法论。背景很多公司选择使用
2021-04-25 17:50:09
516
原创 mysql可重复读的实现原理
MySQL可重复读隔离级别的实现原理1、原理MySQL默认的隔离级别是可重复读,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。 那么MySQL可重复读是如何实现的呢?使用的的一种叫MVCC的控制方式 ,即Mutil-Version Concurrency Control,多版本并发控制,类似于乐观锁的一种实现方式实现方式:InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里存储的并不是实际的时间
2021-04-25 11:57:30
5950
2
原创 java设计模式之享元模式
享元模式概念运用共享技术有效的支持大量细粒度的对象如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。目的是提高系统性能上面的概念乍一听好像单例模式其实不是,单例模式只保存一个对象,但是这里可以有很多个不同对象,但是每个对象只有一个实例而已。也就是说享元模式使用多个单例模式。例子解释我用一个例子来解释享元模式让你们听的更懂。一片大沙漠我想看树 树的品种有很多种,不过他们都是树,比如说我想找一颗柳树,如果沙漠有的话,我就去看树。没有的话我就种一棵
2021-04-23 18:14:45
133
1
原创 java设计模式-原型模式
原型模式概述当系统中需要大量创建相同或者相似的对象时,就可以通过“原型设计模式”来实现。原型模式是“创建型设计模式”中的一种。原型模式的核心思想是,通过拷贝指定的“原型实例(对象)”,创建跟该对象一样的新对象。简单理解就是“克隆指定对象”。传统我们想要复制对象里面的参数需要传统使用new方式 。。。拷贝一百份java使用 implements Cloneable 然后重写object.clone()方法,就可以实现对象的拷贝注意 如果重新clone方法必须实现 Cloneable接口 否
2021-04-23 15:55:16
159
1
转载 java设计模式之工厂模式
简单(静态)工厂模式一、背景介绍工厂模式是设计模式的一种,设计模式是自程序开发逐渐就有的,提高开发效率的一种设计思路,先前的开发者们一直在用,只是后来这四个人出了一本书总结了下,就是现在的23种设计模式:1994年由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版的 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的
2021-04-23 11:46:32
221
1
转载 java工具大全
一、Java线上诊断工具 ArthasArthas 阿里巴巴2018年9月开源的一款Java线上诊断工具。工具的使用场景:1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?3、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?4、线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!5、是否有一个全局视角来查看系统的运行状况?6、有什么办法可以监控到JVM的
2021-04-21 14:17:47
644
转载 Runtime类的作用跟用法
Runtimeo类的使用一、得到系统内存的一些信息@Testpublic void runtimeInfo() { Runtime runtime = Runtime.getRuntime(); int processors = runtime.availableProcessors(); long freeMemory = runtime.freeMemory(); long maxMemory = runtime.maxMemory(); long tota
2021-04-21 11:09:31
500
原创 java字节码指令大全
网上找的没有指令码这列 自己把它加上 更方便查阅指令从0x00-0xc9 没有0xba常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01 aconst_nullnull值入栈。0x02 iconst_m1-1(int)值入栈。0x03 iconst_00(int)值入栈。0x04 iconst_11(int)值入栈。0x05 iconst_22(int)值入栈。0x06 iconst_33(int)值入栈。0x07 iconst_44
2021-04-20 17:16:52
181
转载 java嵌套循环优化成单个循环
应用场景:当有两个相同list,或者部门内容相同,要比对两个list,每个list的大小都为1万,两层循环就是1万成1万次list1.forEach(l1->{list2.forEach(l2->{//循环1万成1万次数});});我们的目的是优化代码性能,但是有自己适用场景,一般list内存的都是每条对象,对象都会有唯一标识,比如id第一步,将List转化为Map下面的方法将List<Map<String, Object>>(Map中具有唯一的id标识)
2021-04-16 10:29:04
1469
转载 为什么java对象new之后要进行dup操作
为什么对象被new 以后在执行dup操作?今天有个朋友问我,为什么一个new一个对象的指令在new后面紧跟的是dup操作?他说搜了可能找到的搜索引擎都找不到答案,包括翻了<<深入JAVA虚拟机指令>>这本书也没有任何说明.我们先来看看为dup指令的作用,dup指令可以复制栈顶的一个字再压入栈,也就是把栈顶的内容做个备份.大家知道,JAVA/CLR是完全基于栈的实现,任何操作都是入栈出栈,没有任何寄存器,所以如果要对某一操作数做两次连续操作,那就要复制两次栈顶操作数,比如:
2021-04-14 16:26:26
627
转载 Linux下MySQL的数据文件存放位置
Linux下MySQL的数据文件存放在哪里的 mysql> show variables like '%dir%';Variable_nameValuebasedir/usrbinlog_direct_non_transactional_updatesOFFcharacter_sets_dir/usr/share/mysql/charsets/datadir/var/lib/mysql/ignore_db_dirsinnodb_dat
2021-04-14 11:09:02
9776
转载 Linux下MySQL的数据文件存放位置
Linux下MySQL的数据文件存放在哪里的mysql> show variables like ‘%dir%’;Variable_nameValuebasedir/usrbinlog_direct_non_transactional_updatesOFFcharacter_sets_dir/usr/share/mysql/charsets/datadir/var/lib/mysql/ignore_db_dirsinnodb_data
2021-04-14 10:48:00
2309
原创 AES RSA MD5 base64 DES 加密的区别
首先我们得先了解什么是加密算法加密算法对称加密算法AES:更快,兼容设备,安全级别高:非对称加密算法RSA :非对称加密,有公钥和私钥散列算法(签名算法)MD5:不可逆的加密算法其他常用算法base64https总结加密算法加密技术通常分为两大类:"对称式"和"非对称式"。对称性加密算法:对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。非对称算法:非对称式加密就是加密和
2021-04-13 11:03:34
1077
原创 docker run命令详解(翻译)
docker run命令用于运行一个新容器,而启动一个容器需要非常多的信息,所以该命令的参数非常多,今天就详细分析下该命令支持的参数。首先看一下该命令的格式:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -a, --attach=[] 登录容器(以docker run -d启动的容器) -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用 --cap-add=[]
2021-01-14 15:02:29
392
转载 【docker】docker run命令详解
docker run:创建并启动容器。docker run命令用于运行一个新容器,而启动一个容器需要非常多的信息,所以该命令的参数非常多,今天就详细分析下该命令支持的参数。首先看一下该命令的格式:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]-a, --attach=[] 登录容器(以docker run -d启动的容器)-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用–ca
2020-12-25 21:48:41
2431
转载 Cookie、Session、Token、JWT之间的区别
什么是认证(Authentication)通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)互联网中的认证:用户名密码登录邮箱发送登录链接手机号接收验证码只要你能收到邮箱/验证码,就默认你是账号的主人什么是授权(Authorization)用户授予第三方应用访问该用户某些资源的权限你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登录
2020-06-29 11:45:42
1317
4
原创 MYSQL sum(if())和count(if())的用法
最近有个项目用到了 根据订单类型统计个数 还有根据订单类型计算金额用到了 sum(if())和count(if()) 发现还是挺好用的sum(if()) sum(if(a.order_sun_type=1,price,0))sum函数返回一个值类型的数值,如果a.order_sun_type=1,则返回price如果a.order_sun_type不等于1就返回0。count(if())count(IF(a.order_sun_type=0,TRUE,NULL))count(if(a.
2020-06-24 13:29:27
1558
2
原创 SpringBoot多线程无法注入问题(解决方案)
1、情况描述使用springboot2多线程,线程类无法实现自动注入需要的bean,解决思路,通过工具类获取需要的bean在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例。那我们只有手动获取,解决方案如下:本类是获取bean的工具类,也是交给spring管理,通过程序的上下文获取,在需要注入bean的类中,使用构造方法调用对应获取bean的方法给需要注入对象注入代理bean如下代码:pu
2020-06-20 16:34:27
3239
原创 redis实现消息队列&发布/订阅模式 原理及其代码
在项目中用到了redis作为缓存,再学习了Mq之后想着用redis实现简单的消息队列,下面做记录。Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先队列。同时在更高层面上,Redis还支持"发布/订阅"的消息模式,可以基于此构建一个聊天系统。一、redis的列表类型天生支持用作消息队列。(类似于MQ的队列模型–任何时候都可以消费,一条消息只能消费一次) 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其
2020-06-20 12:36:43
2894
1
原创 IDEA导入jar包之后引用不了
个人在maven中引用zookeeper的时候无法使用其中的方法的问题:1:有jar包,但是无法import解决过程:在这种我尝试过很多种方法想解决这个问题:例如:maven updatemaevn clean --》 maven insertproject -->clean重新加载mavendependencies在maven库删除jar包重新下载更换1.8jdk......但是都没有解决,然后我尝试一下方法(偶尔调皮一下也不错)其中我尝试查看jar包中
2020-06-16 13:43:17
2829
原创 @Autowire跟@Resource 的区别
1.@Autowire是Spring开发的,而@Resource是jdk开发的2.@Autowire是按照type来注解的,而@Resource是按照名称来的,如果名称找不到,那么就按照type,,如下有例子,我自己测试过, 在一个实现类AnnouncementImpl 加上@Service 在图1-1,那么名称就是myovieLister 类型就是 AnnouncementImpl ,我在 controller层使用的时候可以用 @Autowire或者@Resource都是没问题的,1-1这里有个
2020-06-09 09:17:44
553
原创 线程池ThreadPoolExecutor中execute和submit方法对比
在研究ThreadPoolExecutor线程池的时候,发现可以有两种启动线程的方法:submit(Runnable runnable),excute(Runnable runnable)先说个结论吧:submit()方法,可以提供Future < T > 类型的返回值。excute()方法,无返回值。submit方法和execute方法都可以用来提交任务给线程池去执行,但是两者有一些区别,如下:1、定义方法的类不同submit() 是在ExecutorService接口中定义
2020-06-04 16:11:45
2261
2
原创 left join on后面条件失效
原因如果存在 表A left join 表 B ,将表a的过滤条件放到on后面,条件是失效的,因为表A在left 中是将a表的记录全部查询出的,如果要限制a的记录数放到where后面分析:left join 为保证左表所有行 因此 on里的条件只对右表起作用,控制左表的条件写到这里也没用原理:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义.
2020-05-26 10:03:07
2202
3
原创 @JsonFormat 跟 @DateTimeFormat 以及时间转化异常解决
@JsonFormat 跟 @DateTimeFormat1.前端 传给 后端。当前端传来的是键值对,用@DateTimeFormat 规定接收的时间格式。重点当前端传来json串,后台用@ReuqestBody接收,用@JsonFormat 规定接收的时间格式。@ReuqestBody 如果不使用@JsonFormat 接收空格会自动转换成 T 导致时间转化错误报错详情org.springframework.http.converter.HttpMessageNotReadableEx
2020-05-13 11:40:18
3801
2
原创 MyBatis-Plus ActiveRecord模式的CRUD (怎么才发现有这么好用的方法!)
一. ActiveRecord模式ActiveRecord模式简单一点来说就是通过实体类来进行对单表增删改查操作,这种方式简直太简单了。二. 实现方式一:Mapper对象要先继承BaseMapper对象/** * <p> * demo表 Mapper 接口 * </p> * * @author liuguang * @since 2020-3-31...
2020-04-03 16:16:24
644
5
原创 项目不编译test文件的解决
今天在公司开发遇见了一个特别的问题 ,在新电脑操作的时候 ,从git上拉取了一个项目,想要运行test包下的 代码生成器 结果提示找不到类文件(classNotFondException)后来发现是idea导入项目的问题解决方法如下:1.左上角 File — close project 到idea初始页面2.利用idea的import porject 选择项目的pom 文件 导入项...
2020-03-30 13:40:48
5327
2
原创 idea导入项目及导入项目后无输出目录解决
1.点击左上角的File,要先close project然后才能弹出有import project的页面,导入选默认的即可,直到finish。2.如果你导入的项目缺少目录结构,那么再执行一次1步骤即可!...
2020-03-28 14:13:58
1430
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人