java
文章平均质量分 70
小星向上
不是为了工作而编码,是在编码中找寻工作的乐趣
展开
-
springboot内嵌tomcat文件上传路径不存在问题原因
所以当文件超过10k的时候就会使用临时文件了,这也就是为啥临时目录被删除之后,我们上面会出现小文件可以成功上传,大文件上传报错的原因。猜测可能是小文件没有使用临时文件,大文件上传的时候才使用了临时文件,但是这个边界值是在那里控制的呢?临时文件目录被删除,导致文件上传报错,我们使用的是linux系统,10天没有使用,就会被删除。这不是tomcat的问题, 而是我们去解析请求中的文件的时候出现的问题;当我上传小文件的时候可以上传成功,大文件的时候上传失败。默认阈值,超过该阈值上传内容将存储在磁盘上。原创 2023-05-06 17:10:05 · 922 阅读 · 1 评论 -
springboot 使用tomcat详解
这里要明白,不然你后面不知道是怎么调用到这里来的TomcatStarter 注意 该类实现 ServletContainerInitializer ,这个是servlet-api的接口,tomcat启动会调用该实现类的。原创 2023-01-10 17:12:50 · 3328 阅读 · 0 评论 -
springmvc 文件上传请求转换为MultipartFile的过程
从流转换为MutipartFile的过程,不然你就知道在方法中使用,而不知道是怎么样处理的,是不行的。原创 2023-01-06 16:29:14 · 1256 阅读 · 0 评论 -
InheritableThreadLocal
补充:关于ThreadLocal,请看这篇文章引言:最近在看shiro的源码发现了里面使用了InheritableThreadLocal。原创 2022-11-16 17:46:28 · 471 阅读 · 0 评论 -
细说 里氏替换原则
转载:细说 LSP(里氏替换原则) | chengco的博客前言曾经在一次给新入职员工做Java开发的课程培训,讲到面向对象的SOLID设计原则时,大家普遍认为"里氏替换原则"是其中最难理解的一个。也许从头说起才能弄清来龙去脉。为什么叫里氏替换原则?里氏替换原则在SOLID这五个设计原则中是比较特殊的存在:如果违反了里氏替换原则,不只是降低软件设计的优雅性,很可能会导致Bug 只有里氏替换原则是以人名命令的里氏替换原则译自Liskov substitution principle转载 2022-05-06 10:55:21 · 302 阅读 · 0 评论 -
java 注解
声明注解@Retention(RetentionPolicy.CLASS)@Target(ElementType.TYPE)public @interface TableName { /** * 对应的名称 * @return */ String value() default "";}@Target : 指定注解的作用范围 @Target(ElementType.TYPE) - 注解作用于类/接口 :只能在类或者接...原创 2022-04-11 18:13:12 · 593 阅读 · 0 评论 -
java ++前置后置字节码区别
我们都知道: b++ : ++后置的话,先使用,在计算 --c: ++前置 的话.先计算,在使用那本质原因是啥呢,今天就来分析一下: 0 iconst_0 --把int类型的 0 压入操作数栈, 即b 1 istore_1 -- 弹出栈顶元素 0 ,存入位置为1的局部变量中 2 iconst_0 --把int类型的 0 压入操作数栈, 即c 3 istore_2 -- 弹出栈顶元...原创 2021-12-24 14:00:56 · 564 阅读 · 1 评论 -
动态代理原理分析
最近在研究mybaits的源码,mapper是接口,就是用的动态代理返回的代理对象;必须记录一下,今天终于整明白动态代理了,也希望看到这篇文章的小伙伴们能够明白接口是不能实例化的如果我们要实例化的话 必须实现该接口,有个实现类才得行!!1.使用匿名类的方式public class TestProxy1 { interface UserMapper{ void getUser(); } public static void main(String[原创 2021-11-24 15:24:03 · 241 阅读 · 0 评论 -
Java继承中的方法调用,你搞清楚了吗
Scan方法的调用过程我们就从Mybaits和Spring整合的一个类讲解吧, 当时我也有点懵<!-- Mapper 扫描器 2.spring-mybaits整合--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描 cn.wmyskxz.mapper 包下的组件 --> <property name="basePac原创 2021-10-19 15:20:33 · 456 阅读 · 0 评论 -
关于ThreadLocal内存泄漏的问题
什么是ThreadLocal?ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。 既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。以上就不多说了,百度一下多的是这个描述怎么使用ThreadLocal?原创 2021-08-17 16:10:47 · 325 阅读 · 0 评论 -
与运算(&)、或运算(|)、异或运算(^)
目录与运算(&)与运算(&):两个都为1才为1 0000 1111 0000 1010& 0000 1010 都为1才为1 或运算(|)或运算(|): 有一个为1,则为1例子1. 0000 1111 0000 1010 | 0000 1111 有一个为1,则为1例子2. 0001 0001 0000 1000 | 0001 1001 有一个为1,则为1异或运算(^)异或运算:如果两个位为原创 2021-03-12 13:56:55 · 2016 阅读 · 0 评论 -
使用自定义注解和反射解决字段必填的业务
业务场景:导入的时候判断某些必填字段是否已经填上,如果没有填的话,写入该字段必填的信息,并把这些都返回页面展示使用自定义注解: 定义我们的注解类:如下@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface FiledError { String value();}定义好了注解类之后就可以使用啦,在我们下载原创 2021-02-24 15:12:35 · 1354 阅读 · 0 评论 -
分析volatile
volatile作用: 我们看到的最多的解释volatile就是:volatile保证内存可见性、禁止指令重排! 那我们首先来了解内存可见性!内存可见性: 可见性是指线程之间的可见性,当多个线程访问同一个变量时,当一个线程修改了该共享变量的值,其他线程能够立即看到修改后的值! 那既然volatile关键字能够保证内存可见性,那我就来个例子看看是否可以保证内存可见性...原创 2020-12-04 17:51:51 · 137 阅读 · 0 评论 -
为什么要内存对齐
CPU访问内存时,并不是逐个字节访问,而是以字长(word size)为单位访问。比如32位的CPU,字长为4字节,那么CPU访问内存的单位也是4字节。这么设计的目的,是减少CPU访问内存的次数,加大CPU访问内存的吞吐量。比如同样读取8个字节的数据,一次读取4个字节那么只需要读取2次。下面我们来看看,编写程序时,变量在内存中是否按内存对齐的差异。假设我们有如下结构体:struct Foo { uint8_t a; uint32_t b;}示意图如下:我们假设转载 2020-07-17 16:30:48 · 2657 阅读 · 0 评论 -
Java对象的布局
Java对象的布局注意:我用的是jdk1.8版本的在 HotSpot虚拟机中,对象在内存中的存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding):如下图对象头Mark Word:包含一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。在32位系统占4字节,在64位系统中占8字节; Class Pointer(类型指针):用来指向对象对应的Class对象(其对应的元数据对象)的内存地址。在32位系统占4字节,在64位系原创 2020-07-15 17:08:36 · 874 阅读 · 0 评论 -
javap -c 字节码含义
javap -c 字节码含义栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 &nb转载 2020-07-09 17:28:07 · 192 阅读 · 0 评论 -
java 线程的状态
介绍:Java中线程的状态分为6种。Thread类里面定义了枚举类State,里面详细的介绍了6种状态。如下(直接copy的 小小的用百度翻译了一下,(●'◡'●)):NEW、RUNNABL、BLOCKED、WAITING、TIMED_WAITING、TERMINATED/** * A thread state. A thread can be in one of the following states: * <ul> * <li>{@li原创 2020-05-22 17:33:54 · 120 阅读 · 0 评论 -
s=s+1和s+=1的区别
在编程语言中,一般的数据类型从小转到大可以自动转换,而从大转到小必须强制转换short s = 1;s = s+1;报错吗?为什么?short s = 1;s+=1;报错吗?为什么?从源码角度:(1) s = s+1报错,这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换。所以将一个int类型赋给short就会出错(2) s += 1这句不报错通过反编译可以看到源码为当...转载 2020-05-18 17:02:25 · 2921 阅读 · 0 评论 -
设计模式之单例模式
所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。在Java,一般常用在工具类的实现或创建对象需要消耗资源。特点类构造器私有 持有自己类型的属性 对外提供获取实例的静态方法懒汉模式 线程不安全,延迟初始化,严格意义上不是不是单例模式public class Singleton { private static Singlet...转载 2019-12-12 15:47:49 · 108 阅读 · 0 评论 -
Java读取本地图片并展示在页面上
业务需求: 上传图片 - > 数据表中存储了真实的图片所在盘地址(并没有存在tomcat路径下) 问题描述: 页面要展示上传的图片 <img src=""/> 直接写磁盘地址是读取不到的解决方案: 通过后台在response中读到二进制流的方式来在前台显示图片;@RequestMappi...原创 2019-11-26 17:07:19 · 7048 阅读 · 0 评论 -
idea报错java.lang.OutOfMemoryError: PermGen space
1.问题 项目运行报错:java.lang.OutOfMemoryError: PermGen space2.原因 PermGen space 主要是存放静态的类信息和方法信息,静态的方法和变量,final标注的常量信息等。java虚拟机装载类的空间不够,与Permanent Generation space有关;3.解决 ...原创 2019-08-02 14:55:18 · 7079 阅读 · 0 评论 -
eclipse创建maven项目时,添加src/main/java会提示 The folder is already a source folder.解决方法
当你用eclipse创建完maven项目时,添加src/main/java 时,系统会提示The folder is already a source folder但是我们看我们的项目里面是没有这个文件夹的,但是你项目右键BuildPath --> Config BulidPath时会出现下面这个页面,你会发现其实是有这个文件夹的,只不过是missing,这是因为maven自己引入原创 2017-11-30 14:56:05 · 1617 阅读 · 0 评论 -
SpringMVC访问不到静态资源的几种解决方法!
解决方法1:在web.xml中进行配置,不需要拦截的都需要配置一下 default *.png default *.js default *.css原创 2017-07-20 15:56:00 · 14432 阅读 · 4 评论 -
springMVC基于form表单上传Excel文件,导入数据
注意:导入jxl.jar1.jsp页面 2.java@Controller@RequestMapping(value="import")public class ImportController { @RequestMapping(value="importUser") public Stri原创 2016-08-11 16:00:00 · 12629 阅读 · 13 评论 -
spring AOP例子
下面这是一个简单的spring ioc例子学生介绍自己的接口:package com.bdqn.aop.dao;public interface Student { public void Introduce(String name);}实现类:package com.bdqn.aop.dao.impl;import com.bdqn.aop.dao.Stud原创 2016-07-04 10:21:36 · 685 阅读 · 0 评论 -
mybaits中#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的转载 2016-06-12 17:22:45 · 1157 阅读 · 0 评论 -
springMVC的拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。 一、定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在转载 2016-06-27 10:39:54 · 219 阅读 · 0 评论 -
使用JDBC连接mysql,db2等数据库
JDBC连接数据库的方法:1 .连接Oracle 8/8i/9i/10g/11g(thin模式)Class.forName("oracle.JDBC.driver.OracleDriver").newInstance();String url="JDBC:oracle:thin:@localhost:1521:orcl" //orcl为Oracle数据库的SID原创 2016-05-20 17:10:24 · 9644 阅读 · 0 评论 -
java 常用排序算法
Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法 Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅转载 2016-05-31 17:21:12 · 331 阅读 · 0 评论 -
java调用webservice的方法
1.使用HttpClient用到的jar文件:commons-httpclient-3.1.jar方法:预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。[java] view plain copyString soapRequestData = "1.0/" encoding=/"u转载 2016-05-25 11:02:43 · 377 阅读 · 0 评论 -
select重复选择同一项,还可以触发onchange事件
xxxxxxxx1xxxxxxxx2xxxxxxxx3当你重复点击同一项的时候,你会发现根本不会执行onchange方法.大家可以依照下面的方法,就可以实现重复点击的时候也能够实现onchange方法了,如果你们还有更好的方法,欢迎一起交流 var id = document.getElementById("u18"); id.addEventListener('chang原创 2016-04-06 16:39:49 · 9036 阅读 · 1 评论 -
java 配置jdk环境变量
1.下面开始配置环境变量,右击 我的电脑 ->属性 --> 高级 --> 环境变量,如下图:2.选择 新建系统变量 --> 新建系统变量 对话框,在 变量名 文本框输入“JAVA_HOME”,在 变量值 文本框输入JDK的安装路径,单击“确定”按钮,如下图:3 。在“系统变量”选项区域中查看PATH变量,如果不存在,则新建变量 PATH,否则选中该变量,单击“编辑”按原创 2016-03-11 16:34:21 · 487 阅读 · 0 评论 -
Java创建excel表格并下载
public void toExcel(HttpServletResponse response){ //创建工作薄 WritableWorkbook book = null; //创建工作流 OutputStream os = null; response.setCharacterEncoding("utf-8"); //清空输出流 response.reset();原创 2016-03-29 17:50:19 · 495 阅读 · 0 评论 -
理解Java的static import静态引入机制
J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员。本文介绍这一机制的使用方法,以及使用过程中的注意事项。 在Java程序中,是不允许定义独立的函数和常量(当然,准确的说,只是被final修饰、只能赋值一次的变量)的。即使从它们本身的功能来看,完全不需要依附于什么东西,也要找个类或接口作为挂靠单位才行(在类里可以转载 2018-02-05 16:36:57 · 493 阅读 · 0 评论 -
try catch finally 执行顺序
在网上看到一些异常处理的面试题,试着总结一下,先看下面代码,把这个方法在main中进行调用打印返回结果,看看结果输出什么。 public static int testBasic(){ int i = 1; try{ i++; System.out.println("try block, i = "+i); ...转载 2018-03-20 15:49:27 · 233 阅读 · 0 评论 -
java中Static内存图解
Static内存图解:解析:如代码:①:当程序运行,class进行加载这时在方法区则会有class文件区而class文件区内又有两个区(代码中有两个类一个person一个personDemo)这时class文件区的第一个区产生:然后产生第二个区class区域内有成员属性与成员方法.而为什么没有静态的属性与方法呢,是因为当程序加载该class文件时,系...转载 2019-01-03 17:28:38 · 475 阅读 · 0 评论 -
eclipse 查看源码是source not found
场景:就是我想看源码 结果给我弹出个框 说的source not fond 我点击了"Attach Source...",在出现的对话框中选择"External Location",之后点击按钮"External File...",选择对应的jar之后还是不得行,so就安装下面这样就可以了直接说操 作!1.Help -> Eclipse Marketplace 如下图...原创 2018-12-20 16:06:07 · 269 阅读 · 0 评论 -
什么是CAS机制?
我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized...转载 2018-12-06 10:40:34 · 118 阅读 · 0 评论 -
Java中的数据存储(堆、栈、常量池)
原文转自http://bbs.itheima.com/thread-9597-1-1.html1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制。2.栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。3.堆:存放所有new出来的对象。4.静态域:存放静态成员(static定...转载 2018-11-23 16:49:32 · 319 阅读 · 0 评论 -
查看class文件的jdk版本
今天遇到一个问题:线上的项目有个class修改了一下,但是启动tomcat却报错 :HTTP Status 503 - This application is not currently available查找问题发现是jdk版本不一致导致的,线上的class 的jdk版本为1.5,但是我本地编译的为1.7,所以报错了;解决: 本地用jdk1.5编译但是我想先确定是不是为1...原创 2018-11-13 18:17:59 · 856 阅读 · 0 评论