前些天写了几篇面试题的文章,其中包括《重写equals方法为什么通常会重写hashcode方法?》,有朋友可能会说,这类面试题都是“面试造火箭,工作拧螺丝”。不可否认,有些面试题的确如此。但就在今天,因为懂了这篇文章中的知识竟然在大佬面前秀了一把,帮大佬解决了疑问,还换来了一个赶明儿请吃饭的“口头支票”,哈哈下面就来聊聊大佬遇到的奇怪问题以及排查解决过程。大佬的疑惑大佬在项目中写了类似这样的一段代码...
2023-05-16 11:55:29 232浏览 0点赞 0回复 0收藏
本篇为《Shiro从入门到精通》系列第二篇,在上篇《还在手写filter进行权限校验?尝试一下Shiro吧》中,我们学习了Shiro的基本功能、架构以及各个组件的概念。本篇文章继续深入,以官方示例为基础,讲解使用Shiro的流程以及认证和授权的原理分析。下面开始正文:前言Shiro作为常用的权限框架,可被用于解决认证、授权、加密、会话管理等场景。Shiro对其API进行了友好的封装,如果单纯的使用Shiro框架非常简单。但如果使用了多年S...
2023-05-12 11:59:14 1633浏览 0点赞 0回复 0收藏
前言LeetCode第3题,“无重复字符的最长子串”,曾经面试的过程中遇到过的一道算法题。通过这道题,我们能够学到算法中一个比较常见的解题方法:滑动窗口算法。由于LeetCode中很多题都是基于“滑动窗口算法”进行解答,因此本篇文章将重点放在“滑动窗口”上,而不仅仅是这道算法题。当理解了滑动窗口的基本原理之后,所有类似的题都可以轻易解答。下面来看具体的题目和解题方法。“无重复字符的最长子串”题目链接:https:...
2023-05-12 11:58:54 253浏览 0点赞 0回复 0收藏
Autowired和Resource都可以用于来实现依赖注入,但前者是Spring提供的,后者为JDK(JSR250标准)自带的。阿里Java开发规范中推荐使用Resource。但大多数人往往并没有留意为何如此,甚至代码中的提示信息可能都没留意去看。本文就带大家彻底了解一下这两个注解的功能、运用场景及区别。IDE的提示如果在项目中使用Autowired进行注入,如下代码:RestControllerpublicclassInjectController{AutowiredprivateConnectServiceconnect...
2023-05-09 11:34:08 216浏览 0点赞 0回复 0收藏
字符串的拼接在项目中使用的非常频繁,但稍不留意往往又会造成一些性能问题。最近Review代码时发现同事写了如下的代码,于是给他提了一个bug。TestpublicvoidtestForAdd(){Stringresult"NO";for(inti0;i<10;i++){result+i;}System.out.println(result);}本文就带大家从表象到底层的来聊聊,为什么这种写法会有性能问题。IDE的提示如果你使用的IDE安装了代码检查的插件,会很轻易的看到上面代码中的“+”操作会有黄色的背景,这...
2023-05-09 11:33:06 214浏览 0点赞 0回复 0收藏
Web项目中经常会用token来进行用户的访问验证,那么在获得token之后,如果有很多地方需要根据token获得对应的用户信息,你会怎么获取?本文给大家提供N种方式,对照一下,看看你的项目中所使用的方式属于哪个Level,是不是要赶快升级一下?关于token生成、认证部分的操作本文不会涉及,也就是默认token是经过合法性校验的,本文将重点放在之后进行的业务相关处理,即基于token获取用户信息的方式(部分方式需要基于SpringBoot)...
2023-05-09 11:31:37 385浏览 0点赞 0回复 0收藏
学习JVM相关的知识,必然绕不开即时编译器,因为它太重要了。了解了它的基本原理及优化手段,在编程过程中可以让我们有种打开任督二脉的感觉。比如,很多朋友在面试当中还会遇到这样的问题:Java是基于编译执行还是基于解释执行?当你了解了Java的即时编译器,不仅能够轻松回答上述问题,还能如数家珍的讲出JVM在即时编译器上采用的优化技术,而且在实践过程中更深刻的理解代码背后的原理。本文便带大家全面的了解Java即时编译...
2023-05-09 11:30:07 242浏览 0点赞 0回复 0收藏
前言算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。算法是大厂、外企面试的必备项,也是每个高级程序员的必备技能。针对同一问题,可以有很多种算法来解决,但不同的算法在效率和占用存储空间上的区别可能会很大。那么,通过什么指标来衡量算法的优劣呢?其中,上面提到的效率可以用算法的时间复杂度来描述,而所占用的存储空间可以用算法的空间复杂度来描述。时间复杂度:用于评估执行程序所消耗的时间,可以估...
2023-05-09 11:28:08 226浏览 0点赞 0回复 0收藏
作为软件开发人员,我们通常会写一些测试程序用来对比不同算法、不同工具的性能问题。而最常见的做法是写一个main方法,构造模拟场景进行并发测试。如果细心的朋友可能已经发现,每次测试结果误差很大,有时候测试出的结果甚至与事实相反。当然,这不排除是因为软硬件环境因素导致,但更多的可能是因为所使用测试方法自身有问题。比如,不同需要性能比较方法放到一个虚拟机里调用,有可能会互相影响,缺少预热的过程等。本文给...
2023-05-09 11:27:10 211浏览 0点赞 0回复 0收藏
前言在LeetCode的第一题下面,有这样一句评论“有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。”看到这条评论,你是得意的笑呢,还是苦涩的笑?LeetCode第一题为“两数之和”,难度为“简单”,如果这样一个简单的题,没做不出来,的确有些心酸。这就像学一门编程语言时,打印“HelloWorld”的程序都没写不出来的感觉是一样的,凄凉。下面就来一起看看这道题。“两数之和”题名称为“两数之和”,题目详情如下,...
2023-05-09 11:26:10 172浏览 0点赞 0回复 0收藏
前言一道小学加法题,竟然在LeetCode上被标记为“中等”难度,有些人“流下了没有技术的眼泪”,有些人“一顿操作猛如虎,一看击败百分五……”。今天我们来看看LeetCode的第二道题“两数相加”。“两数相加”先来看题目描述,对应官方链接:https:leetcodecn.comproblemsaddtwonumbers给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相...
2023-05-09 11:24:07 205浏览 0点赞 0回复 0收藏
在实践中,发现很多朋友虽然在使用Shiro,但貌似对其并不了解,甚至有的项目还在使用filter来实现权限管理,而网络上相关教程又比较古老。因此,决定为大家更新这么一个关于Shiro的系列教程,最后会整理成册,分享给大家。如果你也想深入学习一下Shiro框架,那么关注一下公众号“程序新视界”,可及时获取最新的文章,等本系列更新完毕会也会第一时间整理成电子版文档分享给大家。第一篇,给大家科普一些基础概念,下面开始正文...
2023-05-09 11:23:26 101浏览 0点赞 0回复 0收藏
如果你是GitHub的开源作者,是否因为GitHub访问慢或图片不显示而苦恼?你是否想让你的代码让更多人看到?那么,你可以将一套开源代码同时提交到多个开源平台。当然,如果你已经在这么做了,但是只是手动的复制、分别上传,那么更本篇文章更值得你一看。前言GitHub几乎是每个程序员必逛的地方,但访问GitHub有一个明显的问题,就是网速比较慢,现在GitHub上很多图片信息还没办法正常显示。Gitee(码云)这几年在国内发展势头迅猛...
2023-05-09 11:22:57 287浏览 0点赞 0回复 0收藏
前言马上就要过春节了,本想着完成手头的任务就可以准备过年了。没想到Netty服务器又被攻击了,当收到服务器报警(CPU飙升报警)信息,就知道对方又下手了。之前是交给下面的兄弟来解决,这次为了过个好年,决定亲自动手把这事给了结了。故事前奏Netty服务是公司比较边缘的服务,只有一台设备在使用,而且代码是之前技术Leader(已离职)写的,加上一直赶工期,所以就没抽出时间去彻底解决这事。当初被攻击没排查代码,看到遭到...
2023-05-06 11:56:25 228浏览 0点赞 0回复 0收藏
先让我们通过一个生活中的场景来还原一下回调的场景:你遇到了一个技术难题(比如,1+1等于几?太难了!),于是你去咨询大牛,大牛说现在正在忙,待会儿告诉你结果。此时,你可能会去刷朋友圈了,等大牛忙完之后,告诉你答案是2。那么,这个过程中询问问题(调用对方接口),然后问题解决之后再告诉你(对方处理完再调用你,通知结果),这一过程便是回调。系统调用的分类应用系统模块之间的调用,通常分为:同步调用,异步调...
2023-05-06 11:55:43 134浏览 0点赞 0回复 0收藏
最近在研究SpringBoot中的异步处理,发现涉及到异步和多线程的很多知识点,就先写几篇关于异步与多线程的文章,带大一起回顾或学习一下相关的知识点。下面开始正文内容:前言在本文中,我们通过一些通俗易懂的方式来解释异步编程和多线程编程,然后再介绍一下它们之间的区别。什么是异步编程首先来看一下异步模型。在异步模型中,允许同一时间发生(处理)多个事件。程序调用一个耗时较长的功能(方法)时,它并不会阻塞程序...
2023-05-06 11:55:08 233浏览 0点赞 0回复 0收藏
当你打开本文,首先想说的是,这篇文章不仅仅是在讲一个知识点,更重要的是在讲一种学习方法:质疑与求证。前言最近在研究SpringBoot的异步处理,准备写一篇文章。在搜集资料时发现一篇文章《SpringBoot中异步请求和异步调用》,以及许多它的衍生文章。文章的确不错,但文章中提到的“异步请求和异步调用”这两个概念,一直百思不得其解,衍生文章中也是在混着用。终于忍不住想探究一番,发现除了那篇文章和衍生的文章之外,并...
2023-05-06 11:54:38 216浏览 0点赞 0回复 0收藏
最近更新了一系列关于异步和回调的文章,比如《一篇文章,搞明白异步和多线程的区别》、《两个经典例子让你彻底理解java回调机制》、《异步请求和异步调用有区别?》,大家感兴趣的话可温习一下。今天再带大家学习汇总一下SpringBoot中异步处理的4种形式,下面开始正文:前言在网络上有关于SpringBoot的异步请求和异步调有两种说法,经过调用这两种说法本质上就是一回事,在《异步请求和异步调用有...
2023-05-06 11:53:57 411浏览 0点赞 0回复 0收藏
老项目中使用到多种json类库,没有统一管理。最近开启全新的项目,准备对json类库进行统一,这样不仅能够压缩jar包的大小,也能够避免某个类库的漏洞导致系统问题。其实,就在前几个月因为FastJson的漏洞,已经全面升级过一次FastJson的版本。现在项目中有用FastJson,有用gson,也有用Jackson。虽然用的类库比较多,但使用的场景并不多,还在可控范围之内。这篇文章重点讲讲对FastJson的一些调研,虽然最终决定强制在项目中禁...
2023-05-06 11:52:53 217浏览 0点赞 0回复 0收藏
在上篇《经过多方调研,最终还是决定禁用FastJson!》中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上比较主流,SpringBoot默认绑定的JSON类库:Jackson。本文就来讲解一下Jackson的基本使用以及与SpringBoot的结合与实践。什么是JacksonJackson是比较主流的基于Java的JSON类库,可用于Json和XML与JavaBean之间的序列化和反序列化。没看错,Jackson也可以处理JavaBean与XML之...
2023-05-06 11:52:08 293浏览 0点赞 0回复 0收藏