
java
jaryle
这个作者很懒,什么都没留下…
展开
-
java @ConfigurationProperties(springboot)和@Value(java)的区别
在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过@ConfigurationProperties注解,我们可以方便的获取这些参数值...原创 2021-06-10 16:33:53 · 258 阅读 · 0 评论 -
java DAO层注解@param和控制层@RequestParam注解
@Param:用来在DAO层中声明参数,如:List<News> selectByUserIdAndOffset(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit);原创 2021-06-10 16:05:23 · 1975 阅读 · 0 评论 -
Spring注解中@Configuration和@Configurable
@Configuration写成了@Configurable,这两个长得很像,所以顺便探究下,有什么区别。@Configuration该注解是可以用来替代XML文件。以前我们配置bean时,都是写在applicationContext.xml文件中的。有了这个注解后,我们就可以编写一个类在其上面加上该注解。即配置类。在配置类中可以在方法上加@Bean注解定义其中的Bean@Configurable现在假设,我们想在非Spring管理的类中使用依赖注入;比如:手动new出来..原创 2021-05-20 10:46:02 · 1167 阅读 · 1 评论 -
NIO中的零拷贝技术
现在好多rpc框架调用都是使用netty作为网路通信框架的底层原理netty使用Java NIO的同步非阻塞,Java NIO的技术核心:零拷贝技术Kafka,dubbo,MQ都是采用Java NIO零拷贝技术提升文件读取性能。2. JavaNIO中的零拷贝定义从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kern.原创 2021-03-30 17:58:52 · 430 阅读 · 0 评论 -
二叉树、平衡二叉树、B树,B+树
索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引 Hash 索引 全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结转载 2021-02-05 09:55:53 · 988 阅读 · 0 评论 -
Java中object类finalize()方法
java提供了一个finalize方法,可以帮助我们进行资源释放,类似于C++中的析构函数。但是目前普遍的认识是不要使用,为什么呢?就是因为对java虚拟机的垃圾回收有影响。这篇文章对其进行一个说明。一、为什么有影响我们都知道一个对象如果没有了任何引用,java虚拟机就认为这个对象没什么用了,就会对其进行垃圾回收,但是如果这个对象包含了finalize函数,性质就不一样了。怎么不一样了呢?java虚拟机在进行垃圾回收的时候,一看到这个对象类含有finalize函数,就把这个函数交给Finaliz原创 2021-01-29 18:30:08 · 730 阅读 · 0 评论 -
mybatis sql注入
原创 2021-01-25 17:23:12 · 224 阅读 · 0 评论 -
JDK8新特性
1.1 函数式编程 1.2 Lambda表达式 1.2.1 语法 1.2.2 函数接口 1.2.3 类型检查、类型推断 1.2.4 局部变量限制 1.2.5 使用示例 2.1 流介绍 2.2 使用流 2.3 并行流 4.1 介绍 4.2 使用说明 4.3 注意事项 6.1 LocalDate/LocalTime/LocalDateTime 6.2 TemporalAdjusters 6.3 DateTimeFormatter下面对几个常用的特性做下重点说明。一原创 2021-01-15 16:34:01 · 437 阅读 · 1 评论 -
Git撤销&回滚操作(git reset 和 get revert)(^_^^_^)
git的工作流工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。暂存区:已经 git add xxx 进去,且未 git commit xxx 的。本地分支:已经git commit -m xxx 提交到本地分支的。这里写图片描述代码回滚在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码:1、在工作区的代码git checkout -- a.txt # 丢弃某个文件,..原创 2020-11-12 14:57:13 · 10608 阅读 · 0 评论 -
git版本回退的最佳操作
使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了两种版本回退的方式,可以让你恢复提交之前的内容:方式一:reset(不推荐)通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了操作步骤如下:1、在gitlab上找到要恢复的版本号,如:139dcfaa558e3276b30b6b2e5cbbb9c00bbdca962、在客户端执行如下命令(执行前,先将本地代码切换到对应分支):gitreset--har...原创 2020-11-12 11:38:26 · 1791 阅读 · 0 评论 -
spring事务提交后一系列相关异步操作(例如MQ或者线程池)(^_^^_^)
1、场景在常见的操作中,我们需要在数据库操作完成(事务提交完成)后进行一系列相关操作,如redis更新操作、发送消息到其他系统等操作。2、方案可以使用spring自带的事务处理机制完成。继承 TransactionSynchronizationAdapter 类执行相关操作。先看一下TransactionSynchronizationAdapter 的源码方法/* * Copyright 2002-2012 the original author or authors. * * Li原创 2020-10-13 14:36:19 · 1145 阅读 · 0 评论 -
@PostConstruct注解
1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:@PostConstruct注解的方法将会在依赖注入完成后被自动调用。@PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}被@PostConstruct修饰的原创 2020-10-12 18:37:05 · 456 阅读 · 0 评论 -
java stream list转map
java 8 使用stream流来对集合进行处理:Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定key-value,value是对象中的某个属性值。Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User.原创 2020-07-29 10:26:37 · 8807 阅读 · 1 评论 -
同步锁可以使用字符串对象做锁需要注意的事项
Java中使用String作同步锁在Java中String是一种特殊的类型存在,在jdk中String在创建后是共享常量池的,即使在jdk1.8之后实现有所不同,但是功能还是差不多的。借助这个特点我们可以使用String来作同步的锁,比如更新用户信息的时候,可以使用用户的名称作为同步锁,这样不同的用户就可以使用不同的锁,提升并发性能。这个特点扩展开来适当的场景就非常之多了。只不过正因为String的特殊性,java还包含了更多的与字符串相关的工具类,如StringBuffer、StringBui原创 2020-07-05 12:32:12 · 1604 阅读 · 0 评论 -
线程池ThreadPoolExecutor的三种队列区别
使用方法:1.SynchronousQueueprivate static ExecutorService cachedThreadPool = new ThreadPoolExecutor(4, Runtime.getRuntime().availableProcessors() * 2, 0, TimeUnit.MILLISECONDS, new SynchronousQueue<>(), r -> new Thread(r, "ThreadTest"));Synchronou原创 2020-06-29 16:45:52 · 2496 阅读 · 0 评论 -
缓存同步、如何保证缓存一致性、缓存误用(^_^)
缓存误用缓存,是互联网分层架构中,非常重要的一个部分,通常用它来降低数据库压力,提升系统整体性能,缩短访问时间。有架构师说“缓存是万金油,哪里有问题,加个缓存,就能优化”,缓存的滥用,可能会导致一些错误用法。缓存,你真的用对了么?误用二:使用缓存未考虑雪崩常规的缓存玩法,如上图:服务先读缓存,缓存命中则返回缓存不命中,再读数据库什么时候会产生雪崩?答:如果缓存挂掉,所有的请求会压到数据库,如果未提前做容量预估,可能会把数据库压垮(在缓存恢复之前,数据库可能一直都起不来),导原创 2020-06-05 15:17:19 · 590 阅读 · 0 评论 -
锁和事务冲突
单机里面,完美解决了锁与事务一、使用锁的原因分析:1、使用锁的目的------------多个外部线程同时来竞争使用同一资源时,会彼此影响,导致混乱------------锁的目的,将资源的使用做排它性处理,使同一时间,仅一个线程能访问资源2、并不是所有的资源,都无法同时服务多个线程 ------ 比如,无状态的资源3、无成员变量/成员变量不存在变化的类---- 就是无状态类 ----- 这种类是线程安全的4、有状态的对象,也不一定是不安全的---------- 如果状态变化原创 2020-06-01 17:48:13 · 4469 阅读 · 0 评论 -
双向链表的结构图
原创 2020-05-26 15:03:31 · 1273 阅读 · 0 评论 -
实现幂等性的几种方式
1、首先说下什么是幂等性呢对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。2、幂等性设计我们以对接支付宝充值为例,来分析支付回调接口如何设计?如果我们系统中对接过支付宝充值功能的,我们需要给支付宝提供一个回调接口,支付宝回调信息中会携带(out_trade_no【商户订单号】,trade_no【支付宝交易号】),trade_no在支付宝中是唯一的,out_trade_no在商户系统中是唯一的。回调接口实现有以下实现方式。方式1(普通方式)过程如下:1.接收到支付宝支原创 2020-05-15 10:03:18 · 2134 阅读 · 0 评论 -
String类和常量池常见面试题
1、String的两种创建方式的区别String str1 = "abc";String str2 = new String("abc");sout(str1 == str2);//false其中,第一种方式是从常量池中获取对象,第二种方式是直接在堆内存中创建一个新的对象。2、String 类型的常量池它的主要使用方法有两种: 直接使用双引号声明出来的 St...原创 2020-04-07 11:20:13 · 449 阅读 · 2 评论 -
java基础细节汇总(^_^)
1 HashMap里的hashcode方法和equal方法什么时候需要重写?为什么需要重写?java 比较二个对象是否相等的时候,1 首先判断二个对象的hashcode值是否相等,2 如果相等则比较equal值是否相等,当hashcode和equal值都相等时,则二个对象相等2 为什么要重写equal方法?答案:因为Object的equals方法默认是两个对象的引用的比较,意思就是指向同...原创 2020-03-30 11:56:54 · 341 阅读 · 0 评论 -
Java 对象动态设置属性值
Maven引用: <!-- https://mvnrepository.com/artifact/cglib/cglib --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artif...原创 2019-12-23 10:48:06 · 2345 阅读 · 0 评论 -
mybatis知识点总结和梳理
使用jdbc开发时,和mybatis相比的不足 1,数据库连接,使用时就创建,不使用就释放,对数据库进行频繁连接开关和关闭,造成数据库资源浪费,影响数据库的性能 解决:使用数据库连接池管理数据库的连接 2,sql语句使用硬编码在java程序中,修改sql语句,就需要重新编译java代码,不利于系统维护 解决:把sql语句放在xml配置文件中,修改sql语句也不需要重新编译java代码 3,原创 2016-04-23 22:28:46 · 26838 阅读 · 6 评论 -
Spring知识点总结
spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架,主要目的就是简化企业开发spring的依赖注入:在程序运行期间,由外部容器动态的将依赖对象注入到组件中实例化spring容器的二种方法第一种:在类路径下寻找配置文件来实例化容器(实际开发中使用此方法)ApplicationContext ctx= new ClassPa原创 2016-04-22 12:30:08 · 5079 阅读 · 0 评论 -
c3p0和dbcp进行配置数据库连接池上的区别
第一、C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现 jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时 需要导入c3p0-*.jar包。c3p0在进行数据库连接时,对数据库的配置文件db.properties有一定的限制driver,url、user原创 2016-05-07 15:38:59 · 1648 阅读 · 0 评论 -
线程间协作的二种方式:wait,notify,notifyAll和condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界原创 2016-05-21 07:40:03 · 620 阅读 · 0 评论 -
Java NIO:NIO概述
Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题。NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题。本文下面分别从Java NIO的几个基础概念介绍起。 以下是本文的目录大纲: 一.NIO中的几个基础概念 二.Channel 三.Buffer 四.Selecto转载 2016-05-21 08:14:38 · 637 阅读 · 0 评论 -
myeclipse启动选择workspace的Launcher框
eclipse\configuration.settings目录下, 有一个“org.eclipse.ui.ide.prefs”文件,用记事本打开, 里面有一个“SHOW_WORKSPACE_SELECTION_DIALOG”, 如果你之前有打勾的话后面的值是false,你把它改成true就好了, 下次再开就出现那个“Workspace Launcher”框了。转载 2016-06-04 14:03:49 · 942 阅读 · 0 评论 -
myeclipse10 提示unable to load default svn client
之前下载javaHL驱动Slik-Subversion 下载路径:https://sliksvn.com/download/ 下载的安装文件Slik-Subversion-1.9.2-x64.msi 默认安装后,重新启动Myeclipse10下载SVN-site-1.8.22直接放到解压MyEclipse 10\dropins 这个目录下重启,终于解决转载 2016-06-05 15:31:26 · 5927 阅读 · 0 评论 -
mysql 5.7+版本时,若发现因根目录下,缺少data文件夹的情况
前题: 1.环境变量配置完成 2.配置文件编辑完成 3.启动服务(即启动不成功,错误信息“MySQL服务无法启动 请键入 NET HELPMSG 3534 以便获得更多的帮助”) 2 错误原因:mysql-5.7.9-winx64.zip里没data目录 3 解决方案:mysql-5.6.27-winx64.zip里的data文件夹复制到C盘M转载 2016-06-05 16:42:27 · 3647 阅读 · 1 评论 -
zookeeper集群配置 Error: Could not find or load main class org.apache.solr.cloud.ZkCLI
zookeeper管理solrcloud集群时,在把solrcloud配置文件上传到zookeeper中出错:执行./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183-cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collect原创 2016-07-22 13:18:06 · 8690 阅读 · 4 评论 -
ssm框架实例开发
ssm之前使用maven和svn的配置省略,逆向工程也省略1、ssm框架整合1.1 整合思路 1.1.1 dao层: 使用mybatis框架,创建SqlMapConfig.xml 创建一个applicationContext-dao.xml 1.配置数据源 2.需要让spring容器管理sqlsessionFactory,单例存在。 3.把mapper代理对象放到spring容器中,使用扫原创 2016-06-14 12:20:53 · 2180 阅读 · 0 评论 -
mvc开发模式
MVC设计模式1,如果是servlet开发的话2.mvc设计模式使用springmvc开发在b/s模式下三层架构技术开发框架ie浏览器发送请求,servlet接收请求,它不能处理,它调用service服务处理请求,service调用dao层去数据库中取得数据,dao层把数据封装到javabean中,并响应service服务原创 2016-07-26 13:01:45 · 290 阅读 · 0 评论 -
JavaWeb学习总结(使用Session防止表单重复提交)
出自http://www.cnblogs.com/xdp-gacl/p/3859416.html 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。一、表单重复提交的常见应用场景有如下的form.jsp页面转载 2016-08-05 13:20:07 · 1066 阅读 · 1 评论 -
buffer.flip()的用法
此方法位于:java.nio.Buffer Buffer是一个用于特定基本类型数据的容器。 缓冲区是特定基本类型元素的线性有限序列。除内容外,缓冲区的基本属性还包括容量(capacity)、限制(limit)和位置(position):缓冲区的capacity是它所包含的元素的数量。缓冲区的capacity不能为负并且不能更改。缓冲区的limit 是第一个不应该读取或写入的元转载 2016-08-17 15:20:03 · 927 阅读 · 0 评论 -
java面试题剖析
1,说说&和&&的区别 答:&和&&都是逻辑与运算符,只有当表达式二端都为true时才返回true,否则只要任何一方不为true,就返回false; &还可以作为位运算符,&&还具有短路功能,只要第一个表达式为false,则下一个表达式就不再执行了。原创 2016-04-26 17:31:39 · 533 阅读 · 0 评论 -
cookie实现商品浏览记录的原理
当我们来浏览网页时,浏览过的商品要显示在一个指定模块中,最多显示10条记录,而且是最后浏览的商品在最上面显示(可以使用LinkedHashMap实现)要实现这些功能,第一需要cookie(这里当用户浏览商品后,服务器端会创建一个cookie(history,cookie)会给用户端会送response.addCooke(cookie)记录商品信息的Cookie)原创 2016-08-14 13:16:00 · 1038 阅读 · 0 评论 -
StringUtils中isEmpty 和isBlank的区别
StringUtils在commons-lang-2.2.jar包中:org.apache.commons.lang.StringUtils ; StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应转载 2016-07-19 22:27:23 · 1118 阅读 · 0 评论 -
java 防盗链
public class RequestPreventThreif extends HttpServlet { private static final long serialVersionUID = 1L; //防盗链:用于保护自己独有的消息,防止被其他的网站直接连接浏览,利于保护自己的信息 protected void doGet(转载 2016-08-10 10:43:00 · 871 阅读 · 0 评论 -
生成随机数的方法
随机数一般使用在图片上传到服务器上,改变图片文件名(随机生成);随机数还会用在,生成token时使用,可以做到session跨域共享 (保存在redis中)随机数生成方法:1.uuid生成随机数String s = UUID.randomUUID().toString();s = s.substring(0,8)+s.substring(9,13)+s.substring(1原创 2016-08-21 21:23:21 · 1178 阅读 · 0 评论