
java
文章平均质量分 50
帅到被人砍啊
发表的文章都是个人的小总结未必全对如果有疑问请大虾们多多指教啊
展开
-
使用RestTemplate 提示 Unexpected end of file from server
今天在使用resttemplate进行远程调用的时候,报了个错误:2021-04-12 15:20:08.429 ERROR 7488 --- [nio-6001-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; ne原创 2021-04-12 15:31:37 · 5341 阅读 · 0 评论 -
eureka服务端的搭建
eureka是spring-cloud体系里面,由netflix推出的一款服务注册发现的框架。eureka分为服务端和客户端,服务端可以是单点部署,也可以是多节点部署,为了高可用一般至少两个节点。在这里介绍eureka服务端三个节点的搭建。开发工具IntelliJ IDEA。1、新建projectnext--》finish2、启动类上添加@EnableEurekaServer 注解这个注解的真正作用不是启动eurekaserver,而是为eurekaserv.原创 2021-03-29 16:30:21 · 2152 阅读 · 0 评论 -
记一次linux部署的大坑
一个web项目,在windows中跑正常,挪到linux里面运行,报PropertyAccessException 2: org.springframework.beans.MethodInvocationException: Property 'transportIds' threw exception; nested excepti on is org.springframework.beans.factory.BeanCreationException: Error creating bean w原创 2021-03-17 18:24:45 · 204 阅读 · 0 评论 -
springboot+thymeleaf+i18n 使用例子
1、IDEA中新建项目2、选择依赖:3、next、finish 项目创建完毕(项目名、groupid等信息自己根据喜好定)4、创建controllerimport org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpub原创 2021-03-12 11:19:33 · 604 阅读 · 0 评论 -
有一种攻击叫彩虹表攻击
在我们日常系统中,很多都有用户注册功能,用户注册需要用户名和密码,密码一般我们都采用md5加密的方式,但是用md5加密,对于一个固定的字符串,其md5值是固定的,这样就会出现彩虹表攻击情况。所谓彩虹表攻击就是指攻击者有一张表,里面有密码明文和对应md5值的对应关系,攻击者利用这些关系来破解用户密码。一般的,md5加密其实也没啥,因为我觉得毕竟彩虹表攻击者少数,只要你的系统还不够大,没人会关注攻击你。树大就容易招风了。应对这个问题,可以使用BCryptPasswordEncoder加密方式代替MD5加原创 2021-01-28 17:32:25 · 4024 阅读 · 0 评论 -
Junit出现空指针异常
sprintboot里面当我们使用junit进行测试后的时候,需引入两个依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</s原创 2021-01-28 13:41:01 · 2705 阅读 · 0 评论 -
spring的@ContextConfiguration注解
在junit测试的时候,我们需要测试spring的内容时,需要用到@RunWith和@ContextConfiguration两个注解。在这里介绍下通过注解注入的bean和原生springContext获取到的bean是同一对象。@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/applicationContext.xml"})publi原创 2021-01-20 14:44:26 · 2899 阅读 · 1 评论 -
浅谈lambda表达式-Collectors.toMap
jdk自从8开始,添加了lambda表达式,为了兼容lambda表达式,所以对接口也做了修改,添加了default关键词。这是jdk8与7最大的一个变动。自从有了lambda表达式之后,项目中被大量运用,但是对于我本人来讲,我其实是挺反对用lambda表达式的,我也一直不用它。原因有三:其一,就是它虽然让代码变的简洁,但是简洁的结果就是造成语法并不为常人理解,我觉得它的语法上并不是通俗易懂的,需要翻看说明才能看的懂;其二,没法调试,它采用流的方式进行处理,内存的逻辑根本没法调试;其三,性能方原创 2020-12-31 14:34:10 · 2616 阅读 · 0 评论 -
java netty
netty基于NIO对其进行了一系列的封装改造。这里主要介绍基于服务端的netty开发,客户端其实跟服务端差不多,当然客户端也可以直接使用socket与netty服务端通讯。在netty开发中,我觉得比较关键的对象有:1、EventLoopGroup对于NIO来讲,其实现类就是NioEventLoopGroup。这个就相当于线程池,用来处理事件。对于服务端,需要有两个NioEventLoopGroup对象,一个是parentGroup,用来处理accept,称之为acceptor;另一.原创 2020-12-23 16:34:54 · 386 阅读 · 0 评论 -
java AIO
AIO,A是Asynchronous 异步的。只要是异步,一定是不会阻塞住主线程,也一定是要有回调函数。具体server端的示例代码如下:public class Server { public static void main(String[] args) throws Exception { AsynchronousServerSocketChannel serverChannel = AsynchronousServerSocketChannel.open().bi原创 2020-12-22 17:15:07 · 116 阅读 · 0 评论 -
java NIO
这两天看了下NIO相关的源码,梳理了下NIO的流程。我觉得NIO里面比较核心的三个对象是Selector,SelectableChannel,SelectionKey。我说下我个人对三者职责的理解:1、SelectorSelector是NIO里面SelectableChannel的多路复用器。他负责管理多个channel和key。2、SelectableChannel是可以被多路复用的channel,常用的实现类是ServerSocketChannel、SocketChannel等, 是原创 2020-12-18 18:42:22 · 99 阅读 · 1 评论 -
java的BIO
BIO是最基本的IO,其流程图如下:示例代码:public class Server { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(); ss.bind(new InetSocketAddress("127.0.0.1",8888)); while(true) { S.原创 2020-12-18 18:13:51 · 150 阅读 · 2 评论 -
关于Switch是Enum类型的疑问
今天在写反射的时候发现了个现象。在使用Swith判断Enum类型的时候,当前类编译完之后会生成这个类的一个$1.class文件,按说类有匿名内部类的时候才会生成这种文件。到底是swith还是enum生成的呢,在此做了个试验:1、使用enum,if,不用swith编译之后没有$1.class2、使用swith,不用enum编译之后没有$1.class3、使用swith,enum判断编译之后出现$1.class结论:使用swith(e...原创 2020-11-30 15:52:35 · 490 阅读 · 0 评论 -
elasticsearch的倒排索引及算法简介
一、什么是倒排索引?倒排索引包含三个内容: 1、倒排表(posting list) 存储搜索数据的id列表 2、词项字典(term dictionary) 存储数据仓库中的词汇 3、词项索引(term index) 标识当前词项是不是被搜索看图:二、posting list的存储算法1)FOR压缩算法 利用斐波那契数列(前两项的和等于第三项)算法,将原始数据压缩为有顺序的一个或多个斐波...原创 2020-11-26 14:22:36 · 1662 阅读 · 8 评论 -
设计模式之单例模式的几种写法
单例顾名思义就是只会有单个实例。这里介绍四种单例的写法:1、饿汉式(推荐,因为简单实用)/** * 单例模式 饿汉 简单实用 * @author wangkai * @date 2020-06-24 13:02 */public class SingleTon { private static SingleTon INSTANCE = new SingleTon(); private SingleTon(){} public static SingleTon原创 2020-11-20 17:43:03 · 83 阅读 · 0 评论 -
递归(二)之求排列组合的结果集
求从1~m中,取出n个数,排列组合的结果集,典型案例就是大乐透,红球区从1~35,取出5个数,不计顺序代码如下:/** * 求从1到m共m个数中取出其中n个的排列组合的结果集,最典型的案例就是大乐透,红球区是从1~35取出5个数 * 写for循环的话,需要写n层for循环,但是n不确定,所以无法直接写for循环,只能通过递归。而递归过程中,因为要记录排列组合的结果,所以内层的循环需要依赖外层循环的值 * 这就需要外层循环将值传入内层,而且从内层中可以层层访问外层值,所原创 2020-11-20 17:31:44 · 231 阅读 · 0 评论 -
递归(一)之java实现排列组合计数
从m个数中随机取出n个数,有多少种组合(忽略顺序)。即Cmn,m为下标,n为上标。公式Cmn = m!/n!/(m-n)!从公式中可以看出实际上就是计算一个数的阶乘,阶乘计算出来了,就是个除法的运算而已。代码如下:/** * 求排列组合 * m为下标, n为上标 * 结果是m!/n!/(m-n)! */ public static double Cmn(int m, int n){ return devide(devide(r原创 2020-11-20 17:15:18 · 1182 阅读 · 0 评论 -
一、计算机核心组成及CPU核心组成
1、计算机的核心组成:CPU、内存2、CPU核心组成CPU的组成书上和网上也都有很多介绍,在此只记录跟JAVA相关的核心组成:PC---->Program Counter 程序计数器 用来记录内存中指令的地址,一次只能计数一个线程的指令地址,线程指令切换的时候会额外存储之前执行的线程及指令。Registers -> 寄存器 用来暂时存储CPU计算需要用到的数据。ALU ---> Arithmetic & Logic Unit 是用...原创 2020-11-05 17:12:31 · 2132 阅读 · 0 评论 -
struts2 上传excel文件
最近公司有个客服用的注册系统需求,希望能批量注册,这个系统是个很老很老的项目,用的是struts2。这个批量需要上传批量操作的数据,这样就产生了struts2实现上传excel文件的需求。在网上翻了一番,千篇一律的写法。最有用的参考文章是:https://blog.youkuaiyun.com/qq_16769857/article/details/48576665?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMach原创 2020-09-25 12:54:32 · 297 阅读 · 0 评论 -
使用redis分布式锁实现一个秒杀业务
无论是秒杀还是其他的减库存业务,一个最基本的原则就是不能超卖和少卖。物品的库存都在一个篮子里,要想不超卖,就必须得加锁控制,而对于分布式系统中,使用redis实现分布式锁也不是什么新鲜事物了。但是控制不好,即便使用redis进行分布式锁的话也有可能在高并发的情况下出现问题,比如超卖、redis连接不上等在这里使用原生的Jedis和RedisTemplate分别写了两个简单的示例,模拟300并发下,抢100个库存物品。在此之前先说一下我工程的maven环境,有时候jar包版本不一样也会产生不一样的原创 2020-08-06 18:24:27 · 573 阅读 · 0 评论 -
手写spring
1、自定义controller、service、requestParam、autowired、requestMapping注解类示例:@Target({ElementType.TYPE}) //指定此注解作用范围,TYPE是类 可以不指定@Retention(RetentionPolicy.RUNTIME) //元注解 用来指定注解的生命周期,有SOURCE/CLASS/RUNTIME, 必须有@Documented //javadoc文档化 成为注解元素的公共API的一部分 可以不要p原创 2020-08-04 15:13:40 · 115 阅读 · 0 评论 -
记一次线上CPU持续飙升的问题排查
最近公司的事务多了很多,都很少有时间来更新了。上周六项目上刚刚发生了一次CPU持续飙高,导致服务不可用的线上事故,在此也简单做下记录。问题排查的过程大概是这样的:查看业务日志中最开始报错的信息,发现数据库连接超时,redis也连接超时,而且出现了大量的连接超时。所以一开始怀疑数据库挂了导致业务线程一直积压。DBA排查了数据库的情况,发现数据库并没有压力,也运行正常。redis的存储是满的。然后开始排查cpu飙高的进程以及线程。步骤如下:1、通过top命令可以看到哪个进程的cpu是高的。原创 2020-07-06 18:58:21 · 808 阅读 · 0 评论 -
根据参数值的不同,调用不同实现类
最近的业务跟口碑关联比较紧密,为了支持客户定制化的要求,有些内容留了扩展口,口碑的团队同学帮我们定义了一些模板类,然后通过实现类传入不同的参数实现不同的功能。其底层的实现源码没有看过,但是类似的功能在dubbo里面也有很多。实际上也是一种钩子方法。出于兴趣,自己根据需求实现了个简单的功能:传入"cat"实现猫叫, 传入"dog"实现狗叫。在此贴一下源码:1、先创建一个抽象的模板类,子类通过实现抽象的方法,并且子类对象调用doSpeak方法,即可实现子类的不同功能。实现类的命名要求必须是传入参数名原创 2020-06-09 10:45:15 · 5725 阅读 · 0 评论 -
PageHelper的简单追踪
项目中用到了PageHelper插件进行实现分页,分页实现非常简单,引入依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <vers...原创 2020-03-24 18:56:30 · 501 阅读 · 0 评论 -
java中关于double类型运算的精度问题
参考:https://blog.youkuaiyun.com/haiyinshushe/article/details/82721234https://www.cnblogs.com/yunfang/p/10414466.html原创 2020-03-06 16:50:10 · 189 阅读 · 0 评论 -
java发邮件eclipse中测试没问题,部署到tomcat上收到的是乱码问题排查
最近项目上有个需求是要求对业务错误信息进行发邮件,故而开发了个发邮件的功能。这个功能很简单,网上也有很多代码。我这里贴一下我的发邮件方法:public static void sendMailByAliyunNew(String subject, String content){ try { String receivers = "收件人邮箱";// 收件人,多个...原创 2020-02-21 15:32:34 · 475 阅读 · 0 评论 -
关于ThreadLocal的浅谈
以前用ThreadLocal用的比较少,今天在看以前的代码的时候,发现有个类里面的方法里面使用了公共的静态变量,而且有很多类都引用了这个方法。由于这个变量不是final的,是动态赋值的,所以在多线程的情况下可能会引起问题。因为要改造这个方法的这个变量问题,所以我想到了ThreadLocal,并对ThreadLocal进行了一次实验,通过实验,对ThreadLocal有了一次比较深刻的认识。在此把代...原创 2020-01-16 18:11:20 · 202 阅读 · 0 评论 -
一次springmvc+mybatis+log4j日志不输出SQL语句问题的排查经历
拿到了个项目程序,使用的是springmvc+mybatis+druid+log4j,跟公司标品程序的配置应该是基本一致。但是启动后,发现控制台不打印sql日志,具体如下图非常郁闷,于是空余时间开始排查为啥没有打印sql日志,网上也有很多种配置方法,改applicationContext.xml、log4j.properties、web.xml等皆无济于事,百思不得其解。最后把标板的配置全...原创 2019-12-06 13:04:24 · 1804 阅读 · 0 评论 -
mybatis报错:java.lang.IllegalArgumentException
java.lang.IllegalArgumentException Mapped Statements collection does not contain value for后面是什么类什么方法之类的:错误原因有几种: 1、mapper.xml中没有加入namespace 2、mapper.xml中的方法和接口mapper的方法不对应 3、mapper.xml没有加入转载 2013-11-01 11:11:19 · 2010 阅读 · 0 评论 -
如何通过输入域名直接访问项目地址
以tomcat应用服务器为例,我们将一个aaa的项目部署到tomcat的webapps下面,启动tomcat,默认输入地址:http://localhost:8080/aaa便可以访问aaa项目,但是我们如何通过输入http://自己想要的域名 来直接访问aaa项目呢,在此以www.test.com为示例域名。其实很简单,只需几步设置即可。修改tomcat的conf文件夹下的server.xm原创 2013-11-06 11:33:34 · 5874 阅读 · 3 评论 -
jstl遍历map集合中的list集合方法
最好的解释都不如例子来的实在,以下就举一个例子描述用法。目的:显示各个学校的学生场景:1、有一个list集合里面存有一个对象School,School的bean中有一个id和name属性,如下List schs= schoolService.getSchool();2、有一个map集合,里面的key是String类型,value是list集合,该list集合存放的是stud原创 2014-03-14 19:05:49 · 8589 阅读 · 1 评论 -
java的web项目中使用定时器
一直 JAVA WEB定时器,定时器的启动一般随web server的启动而启动,一般有两种方法. 方法一:在web.xml里配置一个Servlet,继承HttpServlet,并设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器,在destory()方法里销毁定时器。方法二:在web.xml里配置一个Listener,继承Servl翻译 2014-04-11 10:34:33 · 1286 阅读 · 0 评论 -
jsp页面上传图片之后页面,当前页面的显示上传的图片可以自行更新
${backurl}" alt="图片" height="165px" width="220px"/>原创 2014-04-11 15:14:23 · 3726 阅读 · 0 评论 -
JBOSS性能优化
一.调整JBOSS最大连接数.配置deploy/jboss-web.deployer/server.xml文件 . port="8080" address="0.0.0.0" maxThreads="1600" minSpareThreads="100" maxSpareThr转载 2014-04-11 17:42:28 · 797 阅读 · 0 评论 -
jsp中URL传递中文参数的处理
在页面的url中使用encodeURI(encodeURI(中文)),对中文进行编码,并在服务器的java程序中使用URLDecoder.decode(中文, "UTF-8")进行解码即可;原创 2014-09-29 13:04:46 · 1244 阅读 · 1 评论 -
解决spring4.x 版本的springmvc中提交数组时超过256个值报错问题
springmvc中提交数组时,超过256个值报错问题原创 2017-09-05 16:54:32 · 2378 阅读 · 1 评论 -
nginx解决单点tomcat问题
当我们在一台机器上部署了web应用程序的之后,可以使用http://ip:port/工程名 来访问web应用。那么一个tomcat部署应用,如果出现故障,应用也就挂了。通过负载均衡,是解决单点隐患,实现高可用的方案之一。实现负载均衡的方式,可以使用nginx,也可以使用haproxy,还可以使用f5。本文只讲nginx的负载方式。实现很简单,准备两个或者多个tomcat,将端口号有规原创 2017-10-18 16:36:46 · 754 阅读 · 0 评论 -
IntelliJ IDEA导出jar包
网上有很多种方法,但是亲自尝试过。比如File-->Project Structure里面添加Artifacts,然后Build-->Bulid Artifacts 会弹出一个窗口,然后点build,但是这种方式导出来的jar包提示 错误: 找不到或无法加载主类 com.xx.App。出现了这个错误之后,有的文章说在pom中设置plugin,添加maven-compiler-p...原创 2019-01-09 18:59:42 · 2742 阅读 · 0 评论