Java
文章平均质量分 58
赫萝的红苹果
心若有向往,何惧道阻且长!
https://github.com/yumoxuan-25
展开
-
如何保证系统的高并发,高性能,高可用
假如令牌桶大小设置为100,那么在极限情况下,可能100个请求是同时进来的,这样在接下来的时间里,系统内的请求数会超过100,因为令牌桶还会一直往桶里发放令牌。设置令牌滚轮的最大令牌数量,这就是系统内当前有的令牌数,每次请求进来就获取一个令牌,请求处理完成就将令牌放回滚筒,这样可以保证接口内最多只有设置的最大请求数任务在跑,也能更好地利用系统性能。实现自动扩展机制,在流量高峰期自动给流量大的服务增加新的服务器实例,流量低谷时期自动减少实例,从而支持大规模并发访问,且节省成本。原创 2024-10-22 22:45:00 · 870 阅读 · 0 评论 -
企微侧边栏开发(内部应用内嵌H5)
公司的业务需要用企业微信和客户进行沟通,而客户的个人信息基本都存储在内部CRM系统中,对于销售来说需要一边看企微,一边去内部CRM系统查询,比较麻烦,希望能在企微增加一个侧边栏展示客户的信息,提升销售的工作效率。原创 2024-03-28 15:24:34 · 3706 阅读 · 21 评论 -
IDEA POM文件配置profile实现不同环境切换
在企业级开发中,为了不影响生产环境的项目运行,一般情况下都会划分生产环境、测试环境、开发环境。不同环境可以配置不同的数据库、redis连接,这样在开发新功能的时候就不会影响线上环境。原创 2024-03-03 16:05:52 · 3572 阅读 · 1 评论 -
spring文件上传失败,无法解析文件对象 class org.springframework.web.multipart.support.
从异常来看,涉及到fastjson 和multipart,似乎是fastjson 无法解析multipart,然后发生了异常;但我的代码并没有使用json,应该是AOP的代码出现了异常,但我找不到AOP代码在哪。这些代码是项目实现的日志注解,我确实在方法加上了该注解,而这个注解一开始的实现没有考虑到多文件的情况,所以没有过滤掉,加上之后就好了。我根据他们的文件名去搜,还真搜到了,好在文件名的部分一样。从下面代码可以看出,只把单文件过滤掉了,但多文件没有过滤掉,于是我在后面加上了之后再测试就可以了。原创 2023-08-03 16:11:59 · 1986 阅读 · 4 评论 -
ThreadLocal和局部变量的区别
使用例子:定义一个全局的ThreadLocal,每当用户登录的时候,都会在接口校验登录状态成功之后就把当前登录的用户的ID存进去,这样你就可以在任意一个方法内去使用当前用户的ID。ThreadLocal类似于银行,每个人都可以往里面存数据,通过线程来辨别不同的用户,每个线程就相当于ThreadLocal的一个用户。ThreadLocal为线程提供一个线程级别的储物柜,可以往里面存数据,取数据。数据是专属于线程的。而局部变量,也是专属于线程的。这样来看,两者似乎功能上是一样的,也确实是一样的。原创 2023-05-27 00:27:06 · 1024 阅读 · 0 评论 -
redis管道
利用管道技术可以降低频繁调用redis方法的耗时,把多个redis操作一起提交,提升执行速度。也就是适合批量操作redis的时候使用。原创 2022-12-21 23:30:56 · 192 阅读 · 0 评论 -
nginx
比如:端口8080的项目设置权重为3,8081的项目权重设置为1,那么8080和8081的请求量比大概就是3:1。可以在nginx服务器设置,在请求域名后面加上一个标志路径,把动态接口和静态资源分开放在不同的项目。静态资源放在CDN,可以提高静态资源访问速度;同时也可以降低项目服务器的负担。通过配置文件可以配置不同服务器的权重,这样可以充分利用不同服务器的性能。正向代理是指代理服务器代理客户端,反向代理指代理服务器代理服务端。原创 2022-11-23 14:32:08 · 420 阅读 · 0 评论 -
聊聊泛型吧
Java的泛型是由编译器在编译时实行的,编译器内部永远把所有类型T视为Object处理,但是,在需要转型的时候,编译器会根据T的类型自动为我们实行安全的强制转型。验证:可以尝试获取带泛型的Class,不同泛型类型情况下,获取到的Class是一样的,说明Class无法携带泛型。在编译的时候其实会把泛型类型进行擦除,使用的都是Object类型,到需要使用的时候再强制类型转换。比如编译器看到的代码,就是带泛型的,而虚拟机看到的代码,就是直接将泛型替换成Object的。使用extends通配符表示可以读,不能写。原创 2022-10-09 17:49:00 · 199 阅读 · 0 评论 -
java8 新特性 stream
Stream.of(数组对象)创建流,如果数组数据类型是基本类型,那么创建的流内部是数组对象(int[ ]),会有问题。我理解中Stream.of()更像是直接把参数作为一个个的对象去创建流(看解释符合我的猜想),不过参数是字符串数组的时候又会拿数组里面的数据去创建流,真是疑惑。在括号内,是一对多的关系,左边是原理的对象,右边是一个新的流。也就是将一个对象转成一个流(流里面可能包含多个对象),最后再将全部流合在一起,形成一个新的流。根据括号内的条件,符合条件的加入返回的流,不符合的就被过滤掉。原创 2022-09-01 22:11:34 · 536 阅读 · 0 评论 -
spring事务传播机制
spring事务传播机制简笔记原创 2022-06-28 21:30:22 · 401 阅读 · 0 评论 -
多线程常见题型
线程有哪些状态?线程通常有五个状态:创建,就绪,运行,阻塞,死亡新建状态:新创建了一个线程对象。就绪状态:线程对象创建完毕之后,其他线程调用了该对象的start方法,虚拟机将该对象放入可运行线程池,线程对象进入就绪态,等待获取CPU时间片。运行:线程对象成功获取到锁,并开始运行。阻塞:线程因为某些原因放弃CPU使用权,暂时停止运行。直到线程进入就绪态,才有可能转到运行态。阻塞分为几种情况:等待阻塞:线程调用.wait()方法,线程会释放锁,线程会被放入等待池,然后进入阻塞状态,原创 2022-04-20 19:02:22 · 184 阅读 · 0 评论 -
mybatis生成的xxxexample类常用方式
//结果集排序方式,使用方式, 字段+空格+asc/descprotected String orderByClause;//结果集是否去重,true就是去重protected boolean distinct;//细化的匹配条件protected List oredCriteria;AwardParticipantExample example=new AwardParticipantExample();AwardParticipantExample.Criteria criteria=e原创 2022-04-20 18:55:29 · 889 阅读 · 0 评论 -
rocketmq学习笔记(自用)
下载rocketmq压缩包,然后解压。设置环境变量ROCKETMQ_HOME:解压后文件夹地址设置环境变量NAMESRV_ADDR=localhost:9876然后就可以测试是否可用。可以在github上面找rocketmq-externals,打包里面的console项目,然后运行起来,就可以在网页使用图形界面工具查看rocketmq运行情况(默认使用localhost:9876)不同topic代表不同的mq通道,代表不同的消息队列mq会把里面的消息复制多份,分别发送给各个group。也就是原创 2021-12-13 15:49:00 · 631 阅读 · 0 评论 -
配置环境变量不生效
环境变量配置成功之后,需要打开新的命令行窗口才会生效。原创 2021-12-11 15:30:35 · 737 阅读 · 0 评论 -
Failed to configure a DataSource: ‘url‘ attribute is not specified
Springboot项目报错,原本我的项目能跑的,过了一段时间再去跑,报错了,错误提升如下:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classFailed to determine a suitable driver clas原创 2021-11-15 13:58:24 · 337 阅读 · 0 评论 -
SpringBoot实现图片上传,图片上传之后无法访问
原本以为图片上传很难,没想到有框架之后这么简单。利用multipartfile+transterTo。前端用input标签,设置输入类型为文件。原创 2021-10-11 16:01:57 · 6387 阅读 · 6 评论 -
秋招算是结束了,写个总结吧!
一些絮叨应该从五月份找实习算起,一直到现在,一路上的困难,或许只有和我类似的人才知道。投递大厂有些连笔试机会都没有,就算有笔试的也是笔试完就结束,或许是我leetcode刷得太少了。面试的话,我个人更加喜欢场景题,而不是八股文。因为八股文有点多,而且我感觉就算我背出来了,也并不能让我从众多候选人中脱颖而出。而场景题是最能突出个人的,因为会面试的面试官会根据你说的内容去拓展问你,这样比较容易进入自己的节奏。说说简历吧简历方面,比较重要的是实习经历,最好是有大厂实习,这样有大厂背书,秋招投递会顺很多。原创 2021-09-30 23:13:15 · 198 阅读 · 3 评论 -
Spring面试题
Spring AOP IOCIOC是控制反转,反转和正转相对应,正转代表创建对象的操作有程序员手动完成,使用构造函数new对象,而反转则是将创建对象的逻辑交给IOC容器,IOC容器根据程序需要自动创建所依赖的对象并放到IOC容器中,在需要的时候利用依赖注入将对象注入到对应的引用中。依赖注入有注解注入,setter注入,构造注入。最常用的是注解注入。注解注入有@autowried,默认按照类型注入,@resource默认按照名称或类型注入(先名称后类型);@Value 注入int、float、St原创 2021-09-30 09:50:55 · 158 阅读 · 2 评论 -
java子类强转父类失败 类方法不能被重写
在java中,子类是不能直接转成父类的。如果直接强转就会出现ClassCastException。public class ChongXie extends A{ public static void hello(){ System.out.println("chongxie"); } public static void main(String[] args) { A a=new A(); ChongXie b=null;原创 2021-09-29 13:10:31 · 2457 阅读 · 0 评论 -
说说线程池原理
先说使用:ThreadPoolExecutor类参数,核心线程数,最大线程数(连核心数算在里面),非核心线程销毁之前等待任务的最长时间,前面时间的单位,等待队列大小。提交优先级:核心线程>等待队列>非核心线程执行优先级:核心线程>非核心线程>等待队列如果核心线程10个,最大线程数20,等待队列10,在执行30个线程的时候。会先执行任务1-10,然后执行任务21-30,最后执行任务11-20.首先任务1-10会直接给核心线程执行,核心线程满了之后,任务会被放到等待队列;等待原创 2021-08-10 21:10:24 · 1247 阅读 · 0 评论 -
秋招面试补不足!!!
sql执行时,底层发送了什么?说说AQSdequeue和queue区别SpringBoot和SSM有什么区别,如何实现的?SpringBoot动态装配如何实现?synchronized底层如何实现加锁?如何解决分布式主键id原创 2021-09-22 21:24:13 · 128 阅读 · 0 评论 -
字符串常量池变化,字符串intern方法。
调用intern方法,如果常量池有该对象,会将常量池里面该String对象对应的地址返回。如果字符串常量池没有该对象,那么就会创建一个引用指向堆中的该对象。(jdk1.7以及以后,之前是检测到没有就在常量池创建对象,因为1.7之前常量池在方法区,而1.7开始常量池移到了堆)分析过程:从以下面代码为例。首先b的引用是一定指向堆中创建的该对象的。从第一块代码调用intern方法返回的地址和b的地址不一样可以看出,返回的地址是前面字符串c在字符串常量池创建的对象。而第二段代码,首先b是指向堆中的对象,三者相等原创 2021-09-16 00:09:04 · 128 阅读 · 0 评论 -
基本数据类型的常量池情况,基本数据类型包装类型的比较
基本数据类型和包装类型有自动装箱拆箱机制,因此有一个定律可以使用:取值范围在-128~127。并且两个引用都是包装类型,创建方式至少有一个是用new,那么两者就不相等,否则两者相等。注意char后面是字符还是ASCII码,ASCII常量池范围是0~127。原因:首先是自动装箱拆箱机制(这个是针对两个引用类型不同的情况),是在比较的时候,如果一个引用是基础类型,一个是包装类型,会将包装类型转成基本类型再进行比较;因此是比较值,无论值是多少都相等。如果引用是包装类型,使用直接赋值,并且范围在-128原创 2021-09-15 23:04:14 · 251 阅读 · 0 评论 -
秋招笔试收获
题目:有一组整型数据,里面有正数负数。从前往后遍历该数字,该数组每个节点可以选择取或者不取,在取的过程中,所取的数的和不能为负数。问最多能取多少个数?可以使用优先级队列,把已经取了的值都加入小根堆,一旦遇到添加某个值,和为负数,就将该值加入小根堆,然后从小根堆移出一个数(也就是移除最小数),再调整所取的值的和,这样就相当于将到目前为止选择的数里面的最小值和当前值进行了交换。通过数字替换,这个我倒是没想到,确实很神奇。如果当前值是所取的值里面的最小值,加入最小堆之后再移除出来还是该值。这样就能保证不应该原创 2021-09-12 16:05:34 · 82 阅读 · 0 评论 -
java比较器,匿名比较器,lambda比较器,优先级队列的使用
java有一个比较器接口Comparator,里面有一个compare方法。比较函数有两个参数a,b;返回a-b就是升序,返回b-a就是降序。不过最好用比较,不要用相减。使用场景:Arrays里面有一个sort(T[],Comparator)可以根据比较器对数组的数据进行排序。排序二维数组是最好用的选择。例如每个人都有身高和体重[h,w],有n个人,就可以弄成二维数组。然后按照身高或者体重进行排序。数组降序排序也要使用比较器,根据比较器进行排序。优先级队列里面也要使用比较器。//poin原创 2021-09-10 12:17:56 · 785 阅读 · 0 评论 -
java 对整型数组进行倒叙排序api,List,Integer[]和int[]互转
对数组进行降序排序apijava中没有直接进行倒数排序的api,不过有可以按照比较器规则进行排序的api,可以使用这个api。Arrays.sort(T[] a, Comparator<? super T> c) ,该api传入的数组应该是对象数组,因此使用包装类。import java.util.Arrays;import java.util.Comparator;import java.util.stream.IntStream;import java.util.stream.S原创 2021-09-05 14:38:41 · 1164 阅读 · 8 评论 -
java锁,线程同步
java实现线程的方式一般用实现Runnable接口或者继承Thread一般使用实现Runnable接口更多,因为这样可以更加轻易进行数据共享,也更容易实现同步,因为不同线程使用的是同一个runnable对象。因此对象里面的属性可以直接共享。而如果使用继承Thread的方式实现线程,那么进行线程同步就需要创建一个静态对象作为锁对象,不然对象无法共享也就无法进行线程同步。在实例方法上加synchronized默认使用对象锁,同步代表模块使用的也是对象锁,一个对象只有一把。在静态方法上加synchron原创 2021-09-03 09:06:28 · 100 阅读 · 0 评论 -
JAVA基础面试题(根据今年面经收集)
为什么Arraylist每次扩容1.5倍?首先扩容因子应该小于2,不然后面创建的数组会一直无法使用前面释放的空间。例如1,2,4,8,当第三次扩容的时候,容量为8,而前面的容量加起来才7。确定应该在1-2之间之后,再如何取就需要综合考虑,容量太小,就扩容频繁,影响性能,容量太大,就会造成空间的浪费,1.5是权衡利弊的结果。...原创 2021-08-10 21:09:59 · 249 阅读 · 0 评论