![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
文章平均质量分 53
细雨生寒未有霜
这个作者很懒,什么都没留下…
展开
-
Shiro学习之旅——SimpleAuthenticationInfo
示例代码@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String username = t原创 2021-09-08 09:52:40 · 1019 阅读 · 0 评论 -
Spring都有哪些事务传播特性
来源于《互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析》内容我们再来看看这个传播机制的特性。Spring 事务默认是开启的,外层方法开启事务(Propagation.Required),事务会被传递到子方法中,哪怕子方法没有明确开启事务。如果子方法不想参与当前事务,则可以使用 Propagation.NOT_SUPPORTED,这个方法就会不使用事务,而且作用范围只在本方法内。对事务传播性的描述可理解如下。(1)REQUIRED:支持当前事务,如果当前原创 2021-08-27 11:05:32 · 231 阅读 · 0 评论 -
@Transactional注解的失效场景
总结:参考链接:一口气说出 6种,@Transactional注解的失效场景不是public方法progagation属性设置错误rollbackFor属性设置错误同一个类中没有事务的方法A调用有事务的方法B方法A、B都加了@transactional,但是A调B时A中用catch捕获B产生的异常数据库不支持事务如果事务方法内,开启了新线程去执行其他事务方法也是不受当前事务方法控制的。因为不同线程拥有的threadlocal 不一样...原创 2021-08-12 09:45:35 · 97 阅读 · 0 评论 -
redis基础知识
String指令:set key valueget key批量mget key1 key 2返回一个列表expire key 时间 用于添加过期时间setex key time value 相当于set + expiresetnxincr用于整数自增,区间为signed longList(列表)redis的列表用来做异步队列,将需要延后处理的任务结构体序列化成字符串,塞进redis列表,另一个线程从这个列表中轮询数据进行处理队列:rpush --lpop栈:rp原创 2021-08-11 16:59:04 · 95 阅读 · 0 评论 -
堆排序-java-重要
思路构建最大堆1.1 从最后的父节点开始调整堆1.2 当i == 0时结束调整堆的思路是:2.1 比较当前的父节点 与 左右节点 谁大2.2 父节点大说明没得调整了2.3 左节点大就把父节点和左节点交换值,并递归调整,下一个父节点就从左节点那里开始2.4 右节点同理排序,从最后开始,与0交换,因为0是最大的位置,把最大放到最后,最后的位置就不用动了,heapSize - 1,然后调整堆,就得到排序好的数组。代码import java.util.Arrays;public cl原创 2021-08-01 11:04:26 · 79 阅读 · 0 评论 -
3. 无重复字符的最长子串
3. 无重复字符的最长子串力扣链接思路滑动窗口,fast和slow都是向后移动,slow记录左,fast向后移动,如果fast遇到重复的,修改slow的值,每次都要改变max的值,hashMap用于判断是否有重复的值class Solution { public int lengthOfLongestSubstring(String s) { int len =s.length(); HashMap<Character, Integer> ha原创 2021-07-23 11:44:37 · 40 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列力扣链接思路先找到比 root 小的数列,即这个数列下一位就大于root,假设为midIndexmidIndex之前都是比root 小的,后面从midIndex遍历到right用midIndex后面的数与root比较,如果有还有小于root的说明不是后续遍历如果midIndex后面的数都大于root,则从midIndex左右开始递归判断class Solution { private int[] postorder; pu原创 2021-07-23 11:06:00 · 44 阅读 · 0 评论 -
面试题 02.08. 环路检测
文章目录面试题 02.08. 环路检测方法一(快慢指针)方法二(哈希表)面试题 02.08. 环路检测力扣链接*方法一(快慢指针)时间复杂度:O(N)空间复杂度:O(1)/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next =原创 2021-07-23 10:38:43 · 68 阅读 · 0 评论 -
Java线程池(ThreadPoolExector)
创建线程池的方式1. Executors.newCachedThreadPool()public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,原创 2021-07-12 21:47:51 · 134 阅读 · 0 评论 -
1115.交替打印FooBar
力扣评论区答案看了这个评论感觉很有用/BLOCKING Queuepublic class FooBar { private int n; private BlockingQueue<Integer> bar = new LinkedBlockingQueue<>(1); private BlockingQueue<Integer> foo = new LinkedBlockingQueue<>(1); public F转载 2021-07-05 16:18:48 · 69 阅读 · 0 评论 -
类加载过程、JVM类加载器(ClassLoader)和双亲委派机制
文章目录类加载过程JVM类加载器(ClassLoader)和双亲委派机制类加载过程类的加载过程一般分为三个比较大的阶段,分别是加载阶段、连接阶段、初始化阶段。加载阶段:主要负责查找并加载类的二进制数据文件,其实就是class文件在某个类完成加载阶段之后,虚拟机会将这些二进制字节流按照虚拟机所需的格式存储在方法区中,然后形成特定的数据结构,随之又在堆内存中实例化一个java.lang.Class类对象,在类加载的整个生命周期中,加载过程还没有结束,连接阶段是可以交叉工作的,比如连接阶段验证字原创 2021-07-05 11:07:27 · 84 阅读 · 0 评论