java学习中的问题
Ludwig__
这个作者很懒,什么都没留下…
展开
-
如果当前请求不在异步模式下,则调用此方法是非法的(即isAsyncStarted()返回false)
如果当前请求不在异步模式下,则调用此方法是非法的(即isAsyncStarted()返回false)原创 2022-11-28 18:29:36 · 740 阅读 · 1 评论 -
mysql大量插入时,关闭/开启索引
ALTER TABLE test DISABLE KEYS ;ALTER TABLE test ENABLE KEYS;原创 2021-10-09 11:23:45 · 469 阅读 · 0 评论 -
Mysql中实现批量模糊查询
在查询条件后面反复添加OR id LIKE CONCAT(’%’,’**’,’%’)<if test="Id != null and Id != '' "> AND <foreach item="IdStr" collection="Id.split(',')" open="(" separator="OR" close=")"> id LIKE CONCAT('%', #{IdStr}, '%') &原创 2021-05-14 10:35:22 · 4885 阅读 · 0 评论 -
Mockito使用教程
什么是 MockitoMockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试.使用 Mockito 的大致流程如下:创建外部依赖的 Mock 对象, 然后将此 Mock 对象注入到测试类中.执行测试代码.校验测试代码是否执行正确.为什么使用 Mockito我们已经知道了 Mockito 主要的功能就是创建 Mock 对象, 那么什么是 Mock 对象呢? 对 Mock 对象不是很了解的朋友转载 2021-05-10 10:25:48 · 1811 阅读 · 0 评论 -
MYSQL查询一年中12个月的数据,补全12个月.
1.建立12个月的视图CREATE VIEW 12_month_view ASSELECT 01 AS monthUNION SELECT 02 AS monthUNION SELECT 03 AS monthUNION SELECT 04 AS monthUNION SELECT 05 AS monthUNION SELECT 06 AS monthUNION SELECT 07 AS monthUNION SELECT 08 AS monthUNION SELECT 09 AS mo原创 2021-04-28 14:21:00 · 3245 阅读 · 0 评论 -
MySQL中查询过去12个月的数据.补全12个月,数据为空则补0
– 1.创建现在到过去的12个月的视图CREATE VIEW past_12_month_view ASSELECT DATE_FORMAT(CURDATE(), ‘%Y-%m’) AS monthUNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), ‘%Y-%m’) AS monthUNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), ‘%Y-%m’) AS monthUNIO原创 2021-04-07 11:17:09 · 1410 阅读 · 0 评论 -
Spring事务中@Transactional(rollbackFor)的用意
Spring事务中@Transactional(rollbackFor)的作用两种异常的分类方式:第一种:运行时异常(RuntimeException)、非运行时异常 (Exception 下除了RuntimeException及其子类的其他异常)第二种:受检异常(非运行时异常)、非受检异常(RuntimeException和Error)Spring @Transactional 注解的作用@Transactional 是Spring框架的事务管理,作用是如果业务对数据库操作出现异常的情况下可以回原创 2021-03-30 14:11:59 · 2059 阅读 · 0 评论 -
关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。...原创 2021-01-17 16:03:40 · 246 阅读 · 0 评论 -
《剑指offer》NO40 最小的K个数 大顶堆实现 详解 <Java实现>
public class Solution2_大顶堆{ //用PriorityQueue 来实现一个大顶堆. 当队内元素个数大于K个并且新入的元素小于 大顶堆的最大值,那么就出队列,新的进入.所有元素循环 //完之后,大顶堆内就是最小的K 个元素. //这样虽然没有第一种方法时间复杂度低 O(NlogK) + O(K) ,但是不改变传入数组,适用于海量数据. public ArrayList<Integer> GetLeastNumbers_Solution原创 2021-01-15 20:34:45 · 144 阅读 · 0 评论 -
枚举的特点
1.所有枚举类都是Enum的子类2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项3.每一个枚举项其实就是该枚举的一个对象4.枚举也是一个类,也可以去定义成员变量5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略6.枚举类可以有构造器,但必须是private的,它默认的也是private的。 枚举项的用法比较特殊:枚举("");7.枚举类也可以有抽象方法,但是枚举项必须重写该方法...原创 2021-01-15 19:16:46 · 1673 阅读 · 1 评论 -
表单校验@Valid和@Validated的区别
@Valid对象级联校验,即校验对象中对象的属性 支持嵌套校验而@Validated不支持 但是 @Validated支持分组,而@Valid 不支持.原创 2021-01-11 14:26:04 · 325 阅读 · 0 评论 -
spring中和mybatis中 #{}和${}的区别.
#{}和${}的区别是什么?在mybatis中#{}是预编译处理,${}是字符串替换。Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理 $ {}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。在spring中有#的使用也有$的使用,那么这两个分别是做什么的呢?${key名称}:1、用户获取外部文件中指定key的值;2、可以出现在xml配置文件中,也可以出现在注解@原创 2021-01-11 11:06:29 · 433 阅读 · 0 评论 -
RocketMq中组的概念
GroupName和现实世界中一样,RocketMQ中也有组的概念。代表具有相同角色的生产者组合或消费者组合,称为生产者组或消费者组。作用是在集群HA的情况下,一个生产者down之后,本地事务回滚后,可以继续联系该组下的另外一个生产者实例,不至于导致业务走不下去。在消费者组中,可以实现消息消费的负载均衡和消息容错目标。另外,有了GroupName,在集群下,动态扩展容量很方便。只需要在新加的机器中,配置相同的GroupName。启动后,就立即能加入到所在的群组中,参与消息生产或消费。...原创 2021-01-10 20:38:06 · 6745 阅读 · 2 评论 -
RocketMq广播模式下先开启productor后开启consumer的注意事项.
广播模式的现象如果 生产者先发送消息, 后启动消费者, 消息只能被消费一次(其实可以消费多次,他有一定的延迟,在一定时间内(大概5,6秒内)同一组group可以消费多次.应该与销毁机制有关???) .并且只是一组内只能被消费一次,不同组仍然可以消费这个广播消息. 并且group的个数有一定的限制.我所用的虚拟机只可以定义四个group(group1,group2,group3,group4).如果多个消费者先启动(广播模式),后发消息,才有广播的效果结论:因此必须先启动消费者再启动发送者原创 2021-01-09 19:17:31 · 250 阅读 · 2 评论 -
分布式锁原理
分布式锁-Zookeeper分布式锁原理•核心思想:当客户端要获取锁,则创建节点,使用完锁,则删除该节点。1.客户端获取锁时,在lock节点下创建临时顺序节点。2.然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。3.如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件。4.如果发现比自己小的那个原创 2021-01-04 19:45:50 · 121 阅读 · 0 评论 -
springboot中Dao层添加的@Repository和 @Mapper注解的区别
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。所以 xml中的namespace需要具体到这个接口,不能再像以前一样只要定位到mapper的父路径即可.现在必须精确定位到mapper....原创 2021-01-03 19:24:26 · 2165 阅读 · 0 评论 -
事务的特征与隔离级别
事务特征(ACID)原子性(Atomicity)指事务是一个不可分割的整体,其中的操作要么全执行或全不执行一致性(Consistency)事务前后数据的完整性必须保持一致隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响...原创 2020-12-26 11:05:31 · 2005 阅读 · 4 评论 -
JDK Proxy和CGLIB 动态代理的区别以及代理模式如何选择
动态代理——JDK ProxyJDKProxy动态代理是针对对象做代理,要求原始对象具有接口实现,并对接口方法进行增强.使用JDK Proxy 创建出来的代理对象是 接口的实现类,与其他的接口实现类之间是兄弟关系. 因此 需要用接口来接收. 不能用 接口的实现类来接收. 这样的话类型不匹配,会出报异常.public class UserServiceJDKProxy { public UserService createUserServiceJDKProxy(final UserServic原创 2020-12-21 21:10:16 · 232 阅读 · 0 评论 -
堆、栈、方法区的区别
堆、栈、方法区的区别基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object)。方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。字符串常原创 2020-12-16 19:38:37 · 668 阅读 · 0 评论 -
文件上传下载工具类
public class FileUtil { /** * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream * @param response HttpServletResponse 写入response * @param returnName 返回的文件名 */ public static void download(ByteArr原创 2020-12-16 19:08:11 · 190 阅读 · 0 评论 -
网页中的文件上传与接收
文件上传功能需要前台功能和后台功能共同配合完成前台:文件上传的三要素1.页面提供文件上传的表单元素2.form表单enctype属性的值为multipart/form-data3.表单的提交方式必须是POST,get方式无法提交大量的数据后台:可以使用的技术有很多,在此处我们使用apache提供的commons-fileupload组件完成文件上次操作,后台的操作步骤如下确认请求操作是否支持文件上传创建磁盘工厂对象,用于将页面上传的文件保存到磁盘中获取servet文件上传核原创 2020-12-16 19:03:37 · 946 阅读 · 0 评论 -
把网页资源放到WEB-INF下的目的以及如何访问
WEB-INF 目录下的资源不是为客户直接服务的我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户,客户却不能直接请求访问JSP。如果把这些JSP页面文件移到WEB-INF 目录下,在调用页面的时候就必须把"WEB-INF"添加到URL中。放到WEB-INF目录下的文件是不允许采用redirect方式的跳转来访问的。但是可以采用req.getRequestDispatcher(“WEB-INF/pages/a.jsp”).forward(req,resp); 通过跳转来进行访问.优点原创 2020-12-13 16:43:55 · 1557 阅读 · 7 评论 -
创建一个BaseServlet来利用反射自动根据前台传来的method自动分发方法
创建模板Serclet,让实例都继承这个模板,来实现自动解析"method",并且再利用反射来调用方法.从而实现自动分发方法.@WebServlet("/BaseServlet")public class BaseServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, I原创 2020-12-09 20:47:35 · 188 阅读 · 2 评论 -
idea创建Maven工程的时候出现IDEA java错误:不支持发行版本5 的解决方案
第一步.首先检查一下项目下自己的jdk版本与language level 是否一致第二步 要看一下模块下的language level 要和jdk版本保持一致最坑的是还有一步 .去 File | Settings | Build, Execution, Deployment | Compiler | Java Compiler 选择自己的jdk的版本.这样就完成了.可以执行了...原创 2020-12-09 15:18:59 · 179 阅读 · 2 评论 -
《剑指offer》NO28 对称的二叉树 详解 <Java实现>
public boolean isMirror(TreeNode root) { //先去判断根节点是否为空,再重载方法去判断子节点. if (root == null) return true; return isMirror(root.left,root.right); } public boolean isMirror(TreeNode left,TreeNode right) {原创 2020-12-07 15:15:26 · 106 阅读 · 0 评论 -
Mybatis中集成Log4j
LOG4J的配置和使用在日常开发过程中,排查问题时难免需要输出 MyBatis 真正执行的 SQL 语句、参数、结果等信息,我们就可以借助 LOG4J 的功能来实现执行信息的输出。使用步骤:原创 2020-12-07 11:22:05 · 119 阅读 · 0 评论 -
自定义BeanFactory利用配置文件和反射,动态的创建实现类.灵活度高.
配置文件:值为要创建对象的全类名studentservice=cn.zhao.service.studentserviceimpl.StudentServiceImpluserservice=cn.zhao.service.userserviceimpl.UserServiceImplBeanFactory:public class BeanFactory{ //先加载配置文件 private static Properties properties; static原创 2020-12-07 10:53:24 · 313 阅读 · 6 评论 -
jQuery的$.post(“url“,{json},function(data){},“json“)的最后一个参数的坑
最后一个参数是指定 data 的类型为指定类型(“json”),如果不写的话默认为text,无法解析传过来的json串.但是如果指定为"json",那么后台必须有json类型的返回值传过来,function中的代码才能执行. 如果没有返回值即 data为空的话 还想执行function中的方法,就不能指定返回值类型.直接去掉"json" ,function中的方法就能执行.总之,data的类型必须和指定类型匹配. 是"json"的话,data必须为"json"且不能为空.否则不会报错,但是也没有结果.原创 2020-12-07 10:47:09 · 953 阅读 · 0 评论 -
用BeanUtils.populate来封装对象的时候对于Date的注册日期转换器
BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下:完整方法:BeanUtils.populate( Object bean, Map properties ),这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性。在使用BeanUtils的populate方法或者getProperty、setProperty方法时都会原创 2020-12-07 10:39:26 · 894 阅读 · 11 评论 -
jquery和js中获取数组中元素的方法
jQuery中用到的是$().slice(index)的这个方法.$("#SID option:selected").slice(0)js中$("#SID option:selected")[0]将jquery转成 js对象,直接[index] 来获取.jQuery查询后保存的是一组js数据.直接[] 来获取.原创 2020-12-05 22:05:29 · 2479 阅读 · 0 评论 -
Mybatis增强版getMapper(),两个工厂实现
public class MyBatisUtil { private static SqlSessionFactory factory; static{ try { //1.加载配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.使用Builder解析流中的数据 factory原创 2020-11-27 19:39:02 · 131 阅读 · 0 评论 -
JDBC中关闭Connection是否会自动关闭Statement,ResultSet?
关闭了Connection对象后,是不会自动关闭Statement,ResultSet对象的。他们三者之间关闭没有任何关联,即先关闭谁没有任何先后顺序,可以先关闭他们中的任何一个,且关闭其中的任何一个对象都不会关闭其他其他对象,但一般养成按关闭ResultSet,Statement,Connection的顺序关闭资源。...原创 2020-11-23 19:28:57 · 1686 阅读 · 0 评论 -
SQL语句中聚合函数忽略NULL值的总结
AVG()函数忽略列值为NULL的行。MAX()函数忽略列值为NULL的行。MIN()函数忽略列值为NULL的行。SUM()函数忽略列值为NULL的行。COUNT()函数有两种情况:1.使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。2.使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。例如:CREATE TABLE student2( id INT, sname VARCHAR(20), address VA原创 2020-11-22 14:17:07 · 7579 阅读 · 0 评论 -
volatile为什么不能保证原子性?
volatile只有写操作是原子性的,也就是数据操作完成后会立刻刷新到主内存中。但是被volatile修饰的变量在读的时候可能会被多个线程读。也就是说int i = 1;i++;A线程读 i = 1同时B线程也读了i = 1,然后自增完成刷新入主内存。i的值是2。所以如果该变量是volatile修饰的,那可以完全保证此时取到的是最新信息。但在入栈和自增计算执行过程中,该变量有可能正在被其他线程修改,最后计算出来的结果照样存在问题,因此volatile并不能保证非原子操作的原子性,仅在单次读或者单次写这样原创 2020-11-21 21:29:11 · 8313 阅读 · 11 评论 -
使用split()切割文件名的时候出现下标越界的问题
使用split()切割字符串的时候出现下标越界 String fileName = "a.txt"; String[] split = fileName.split("."); System.out.println(split[0]); System.out.println(split[1]); 文件名输出正常,但是分割错误。 java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bound原创 2020-11-15 16:44:12 · 1869 阅读 · 0 评论 -
Web项目里怎么样直接定位到字节码文件的classes里
//1.先获取字节码文件的根目录。 String path1 = Dao.class.getClassLoader().getResource("").getPath(); System.out.println(path1);// /D:/Controll/out/artifacts/demo1_war_exploded/WEB-INF/classes/ //2.再与student.txt拼接为真实路径。 path = path1 +..原创 2020-11-15 09:24:02 · 124 阅读 · 0 评论 -
为invoke()的不定参数Object...objects传入数组
第一种情况,传非对象数组public class Test { public static void main(String[] args) throws Exception { int[] arr={1,2,3}; //把int[]传给Object...objects,会把int[]当成1个Object对象处理 //传入非对象的数组时,它会把整个数组当做一个Object 实例,打印出的 结果为 1 get(arr); //输出1原创 2020-11-13 22:45:54 · 1262 阅读 · 0 评论 -
HTTP里的MIME 什么是MIME?
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。原创 2020-11-11 18:43:59 · 2224 阅读 · 0 评论 -
Tomcat的servletContext.getRealPath(String s ) 问题
servletContext.getRealPath("/xxxx/xxx/xxx") 只是进行了简单的路径拼接而已。 得到的返回值 就是out文件夹里的Tomcat 的war包路径 加上 输入的路径而已。不管这个路径存在不存在 都会返回。原创 2020-11-11 18:39:56 · 384 阅读 · 0 评论 -
用字符串创建对象,调用方法,获取/修改成员方法
用字符串到创建对象,调用方法,获取/修改成员方法只能用反射有类名name的话,可以用Class.forName(“包名” + name); 来获取类对象。Class aClass = Class.forName(“包名” + name);有了类对象(字节码对象)就可以通过方法名或者成员变量名来操作。aClass.getDeclaredMethod(“method”); aClass.getDeclaredField(“filed”)但是要注意权限问题,如果是private的话,要.setAcc原创 2020-11-01 22:21:38 · 165 阅读 · 1 评论