
Java语言
阿狸远翔
这个作者很懒,什么都没留下…
展开
-
mybatis 动态 SQL if的test写法规则
前言使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。比如:<select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if></select>其中 t原创 2021-06-15 19:58:28 · 1182 阅读 · 0 评论 -
使用Aop实现自定义注解 - 实战篇(统一日志打印)
使用Aop实现自定义注解- 原理篇使用Aop实现自定义注解 - 实战篇(统一日志打印)统一日志打印约定大于配置,系统提供对外的接口要有以下要求,这样的好处是我们可以对接口统一做定制化日志管理。比如只对更新接口打印入参。接口命名单个查询接口,???? findById批量查询接口,???? listByIds单个更新接口,???? updateById批量更新接口,???? batchUpdateById单个新增接口,???? save批量新增接口,???? batchSave原创 2021-06-14 16:22:26 · 1860 阅读 · 1 评论 -
OOM dump文件的几种方法
OOM dump文件的几种方法前言dump的几种方法准备工作我们需要直接dump现在的内存对象。我们需要在发生FullGC时 dump出文件保存。运行时强制修改参考前言 在进行OOM分析或者线上经常FullGC时,需要我们dump内存文件分析,不同情况下需要使用不同的dump方法。dump的几种方法准备工作获取程序的pid有两种方法:执行ps -ef | grep 程序名在java/bin 文件中执行jsp我们需要直接dump现在的内存对象。1.可以使用jmap工具:Jmap命令是原创 2020-10-21 16:39:46 · 3846 阅读 · 0 评论 -
线程钩子ShutDown Hook与Finally
线程钩子前言某些情况下,Finally无法释放线程资源,所以我们需要使用线程钩子释放。在线上对于分布式锁的释放,一般在Finally里进行,但是应用重启时的脚本使用的是kill-15指令关机,此时Finally里面的代码不会被执行,导致分布式锁无法释放。Finally一定会执行么?线程基础知识java中线程状态与转换关系如下图:其中箭头旁边的标注代表执行的线程方法。[外链图片转存中…(img-mQRWdhf5-1601360975262)]从running态转为Block阻塞态有三种方原创 2020-09-29 14:32:41 · 424 阅读 · 0 评论 -
Finally 一定会被执行吗?
Finally 一定会被执行吗?前言在编程的时候大家总喜欢在finally释放各种线程资源,保证线程退出时能够释放占用的资源。但是Finally一定会被执行吗?结论是的一般情况下,finally会在try和catch之后执行,但是以下情况例外:执行了Thread.currentThread().suspend();执行了 System.exit()执行了 Runtime.getRuntime().halt(exitStatus) 、 Runtime.getRuntime().e原创 2020-09-29 14:29:08 · 1667 阅读 · 0 评论 -
多线程Spring注入对象问题的四种解法(@Autowired 注入为空)
多线程Spring注入对象问题的四种解法前言当我们使用多线程时,想给线程注入一个service,但是运行时发现service总是为null。举个????:public class MyThread implements Runnable { @Autowired Service application; public void run() {}}原因new Thread不在spring容器中,也就无法获得spring中的bean对象。根据SpringBean的生原创 2020-09-09 00:38:30 · 5936 阅读 · 2 评论 -
JDK动态代理原理(源码层面)
JDK动态代理前言笔者在写设计模式的代理模式的时候,顺便想起并利用Java的JDK实现了动态代理。事后对源代码很感兴趣,于是顺手分析了一下。其中代理模式两种实现方式见:https://github.com/link8hu/java-源码分析public static Object newProxyInstance(...) throws IllegalArgumentException { //验证传入的InvocationHandler不能为空 Objects.r原创 2020-08-20 01:11:14 · 431 阅读 · 0 评论 -
使用Aop实现自定义注解 - 原理篇
自定义注解的实现本次我们将使用Spring boot 和AOP 实现自定义注解,主要功能是自动打日志。元注解元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:1.@Target,说明了Annotation所修饰的对象范围 2.@Retention,定义了该Annotation生命周期(编译/运行) 3.@Documented,是一个标记注解,没有成员原创 2020-07-31 22:02:49 · 5673 阅读 · 0 评论 -
LeetCode 8. 字符串转换整数 (atoi)
8. 字符串转换整数 atoi题目描述分析代码题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了...原创 2019-12-11 17:41:37 · 216 阅读 · 0 评论 -
220. 存在重复元素 III
#220. 存在重复元素 III题目描述给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t =...原创 2019-12-04 17:39:32 · 224 阅读 · 0 评论 -
LeetCode 46. 全排列
46. 全排列题目描述分析代码题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]分析全排列有很多题,比如随意给定几个数字,求全排列的第x个。本题是输出所有全排列的组合,深度遍历就好。pat刷多了,突然使用Java写深度遍历好别扭...原创 2019-12-04 15:32:39 · 169 阅读 · 0 评论 -
俄罗斯套娃信封问题
俄罗斯套娃信封问题题目给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],...原创 2019-12-02 15:51:24 · 396 阅读 · 0 评论 -
42. 接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6分析解法参考:https://leet...原创 2019-08-09 00:48:16 · 147 阅读 · 0 评论 -
146. LRU缓存机制
题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使...原创 2019-08-09 00:24:30 · 171 阅读 · 0 评论 -
Leetcode 695. 岛屿的最大面积
题目给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1...原创 2019-08-08 17:41:50 · 200 阅读 · 0 评论 -
浅谈git命令及其使用场景
浅谈git命令git与SVN对比GIT是分布式的,SVN不是GIT的内容完整性要优于SVNGIT分支和SVN的分支不同svn在没网的时候没办法commit以及创建分支等操作,git每个人都有自己的版本库。GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成...原创 2019-07-31 13:17:19 · 461 阅读 · 0 评论 -
GC悲观策略之Parallel GC篇
先来看段代码:import java.util.ArrayList;import java.util.List;/*** -Xms30m -Xmx30m -Xmn10m -XX:+UseParallelGC*/public class Test1 { public static void main(String[] args) throws Interrupte...转载 2019-07-31 00:36:57 · 1011 阅读 · 0 评论 -
一次高并发问题记录
一次高并发问题记录###场景复述:目前做了一个Excel导入的功能:先读取整个Excel,遍历读取到的List将数据库中已存在等无效数据的剔除批量插入数据库问题复现:连续两次导入同一份文件结果:数据库中存在两份相同的数据原因分析: 上次的导入还没执行完毕,这次又导入。每次查询数据库都显示库位不存在,所以插入了两遍。目前现场只要等上次...原创 2019-09-20 15:51:30 · 365 阅读 · 0 评论 -
apache.commons — BeanUtils、ConvertUtils
前言beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值、动态定义和访问bean属性;细心的话,会发现其实JDK已经提供了一个java.beans包,同样可以实现以上功能,只不过使用起来比较麻烦,所以诞生了apache commons beanutils;看源码就知道,其实apache commons beanutil...原创 2019-07-21 22:07:51 · 1800 阅读 · 0 评论 -
LeetCode 155. 最小栈
题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); ...原创 2019-08-09 14:43:07 · 232 阅读 · 0 评论 -
leetcode 142. 环形链表 II
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1...原创 2019-08-09 16:36:42 · 151 阅读 · 0 评论 -
1. 两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回[0, 1]分析使用hash...原创 2019-08-09 23:54:43 · 181 阅读 · 0 评论 -
LeetCode 15. 三数之和
题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2] ]分析这个题O(n2)的算法比较...原创 2019-08-10 17:01:47 · 150 阅读 · 0 评论 -
SpringBootStarter 分析及其手写实现
SpringBootStarter 分析及其实现stater可以帮助我们省略很多的配置,我们不如分析下,SpringBoot的stater,然后实现一版自己的starter:主要是类似Mybatis那种自动根据条件注入的功能mybatis-spring-boot-starterMybatis-starter主要包含两个pom文件点进去可以看到:<project xmlns="http...原创 2019-08-31 23:27:51 · 623 阅读 · 0 评论 -
记一次高并发更新 feature--拓展字段 问题
记一次高并发更新 feature–拓展字段 问题##前言: 原思路:- 从数据库查出原有feature 1- 更新要修改的内容 2- 整个feature置入数据库 3##问题:在高并发情况下: 两线程同时查出了feature,并先后完成了2-3步,结果: 更新被覆盖解决办法:使用数据库JSON操作函数,在数据库上更...原创 2019-09-20 15:54:49 · 676 阅读 · 1 评论 -
Spring不支持静态变量注入原因及其解法
Spring不支持静态变量注入原因及其解法场景重现:原因分析:解决方案后话场景重现:以下变量在使用时会报空指针@Autowiredprivate static ReadService readService;原因分析:静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。静态变量不属于对象,只属于类,也就是说在类被加载字节码的时候变量已经初始化了...原创 2019-09-28 11:24:08 · 775 阅读 · 0 评论 -
84. 柱状图中最大的矩形 (没有指针 Java给一个数组追加数字太难用)
给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10 /** ...原创 2019-04-10 16:39:30 · 115 阅读 · 0 评论 -
SpringBeaUtils 对比 ApacheBeanUtils
spring包中BeanUtils.copyProperties的实现。spring中实现的方式很简单,就是对两个对象中相同名字的属性进行简单get/set,仅检查属性的可访问性。private static void copyProperties(Object source, Object target, Class<?> editable, String... ignorePr...原创 2019-07-21 22:07:16 · 782 阅读 · 0 评论 -
优雅的参数检验 — guava的Preconditions
##前言:工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。。。它包含以下东西:集合 [collections]缓存 [caching]原生类型支持 [primitives support]并发库 [concurrency libraries]通用注解 [commo...原创 2019-07-06 22:08:58 · 327 阅读 · 0 评论 -
复制 对象非空属性 实现及其原理
利用Spring框架的BeanUtils实现代码如下: /** * 获取到对象中属性为null的属性名 * @param source * @return 要拷贝的对象 */ private static String[] getNullPropertyNames(Object source) { final Bean...原创 2019-06-17 17:02:24 · 853 阅读 · 0 评论 -
快手实习生机试题 阶乘末尾非0数字
import java.util.*;/** * @program: 个人demo * @description: 每次都是pass * @author: Mr.Hu * @create: 2019-03-29 19:07 */public class Main { public static void main(String[] args) { Scann...原创 2019-04-13 18:27:15 · 250 阅读 · 0 评论 -
hashset输出竟然有序???
看代码会输出什么?public static void main(String[] args) { HashSet<Integer> set =new HashSet<>(); set.add(8); set.add(1); set.add(2); set.add(2); ...原创 2019-04-15 21:49:19 · 1958 阅读 · 1 评论 -
LeetCode 322. 零钱兑换(Java 动态规划)
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说...原创 2019-04-09 11:39:09 · 3367 阅读 · 0 评论 -
两个队列模仿一个栈 -Java 两种方法
/** * 两个队列模仿一个栈 * 第一种思路: * push 放进空的队列,然后把另一个队列的数据加到本队列后面 * pop remove非空队列头就好 * 第二种思路 * push 放入非空队列 * pop 时 将非空队列数据转移到空队列只保留最后一个并弹出 * * *第一种思路代码:static Deque<Integer> q1=new Array...原创 2019-04-11 21:15:03 · 493 阅读 · 0 评论 -
腾讯暑期实习生机试题 - 打怪兽 java
本题测试样例46 2 4 91 1 1 2输出:346 2 8 9 161 1 1 2 2输出:331 1 51 1 2输出:3import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * @program: 个人demo * @descri...原创 2019-04-06 13:16:10 · 856 阅读 · 0 评论 -
LeetCode 70. 爬楼梯 (Java)动态规划
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. ...原创 2019-04-10 11:38:22 · 485 阅读 · 0 评论 -
java 并发之Synchronize关键字和可重入锁lock
Synchronize关键字和可重入锁lockJDK6.0 优化后这俩的性能已经差不多了。不同点:lock 申请锁时可以限制申请时间,可以设置为申请到锁后响应中断(可以用于处理死锁问题),也可以设置为公平锁。Synchronize 配合Object的wait()、notify()。可重入锁配合Condition条件。注意点:加锁不要对不可变类对象加锁,对这些对象加锁并操作(更改)时...原创 2019-03-22 21:14:38 · 422 阅读 · 0 评论 -
java内存泄漏
java内存泄漏静态集合类引起内存泄漏/** * @program: 个人demo * @description: 内存泄露测试案例 * @author: Mr.Hu * @create: 2019-03-17 20:55 */public class OOM { static List<M_4> list=new ArrayList<>();...原创 2019-03-18 21:19:02 · 172 阅读 · 0 评论 -
java与C语言 变量初始化与默认值
C语言中,定义局部变量时如果未初始化,则值是随机的,为什么?定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。java 局部变量未赋值就初始化,编译报错,而类变量和实例变量被Java默认初始化为0值Java全局变量和局部...原创 2019-03-21 22:29:13 · 340 阅读 · 0 评论 -
使用比较器 java.lang.IllegalArgumentException: Comparison method violates its general contract! 解决办法
java.lang.IllegalArgumentException: Comparison method violates its general contract! at line 899, java.util.TimSort.mergeHi at line 516, java.util.TimSort.mergeAt at line 441, java.util.TimSort....原创 2019-03-21 22:26:49 · 4841 阅读 · 0 评论