- 博客(53)
- 收藏
- 关注
原创 与华为联调过程中,HTTP/2.0 协议踩坑
2、最开始使用JDK11原生net.http包下的httpClient,但是此客户端只支持HTTP2协商升级协议,也就是apln协议,此协议需要发起带upgrade的1.1请求,对端如果支持升级2.0,则会回101接受升级。一般用于不确定对端是否支持HTTP/2.0的时候,测试中抓包发现,当我们服务给对端发请求时,第一个请求为upgrade,协商升级,而后直接报错,所以猜测要改为明文。以上操作之后,发出的请求已经为HTTP2.0明文协议的请求了,即不发升级请求协商升级,直接发送2.0请求。
2023-03-30 11:06:30
493
2
原创 快排
原理: 快速排序,说白了就是给基准数据找其正确索引位置的过程. 如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾. 首先从后半部分开始,如果扫描到的值大于基准数据就让high...
2021-01-12 20:51:46
284
原创 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
传陆编程Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。本篇文章,并不是要更加完美的解决这三个问题,也不是要颠覆业界流行的解决方案。而...
2019-11-04 10:20:45
255
原创 单例模式的各种模式
<h1>单例模式</h1>单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一...
2019-10-19 19:48:27
194
原创 为什么会产生跨域问题?
1、浏览器限制2、跨域(协议,域名,端口不一样都是跨域)3、XHR(XMLHttpRequest请求)同时满足三个条件才有可能产生跨域问题。解决跨域问题方案。1,从浏览器出发,允许浏览器跨域。2,从XHR(XMLHttpRequest)出发 (1)避免发生跨域。使用jsonp,由于jsonp请求是通过script的方式发送的(只有xhr的请求方式...
2019-10-19 19:17:45
1858
转载 什么是RPC
一个阳光明媚的早晨,老婆又在翻看我订阅的技术杂志。“老公,什么是RPC呀,为什么你们程序员那么多黑话!”,老婆还是一如既往的好奇。“RPC,就是Remote Procedure Call的简称呀,翻译成中文就是远程过程调用嘛”,我一边看着书,一边漫不经心的回答着。“啥?你在说啥?谁不知道翻译成中文是什么意思?你个废柴,快给我滚去洗碗!”“我去。。。”,我如梦初醒,我对面坐着的可不是一个程序...
2019-10-18 14:12:42
162
原创 session一致性-将session存储到redis中
分布式项目通常部署在不同的服务器中,而传统session只存储在本地服务器,并不能实现session的跨域使用。因此实现session一致性通常将sessio存储到redis中,其他服务器获取回话信息直接去redis中获取。spring-session原理就是讲获取session的方式,从tomcate容器获取改为了从redis中获取。现在spring-session整合redis:pom....
2019-10-15 22:20:26
712
1
原创 完美理解三次握手,四次挥手
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三...
2019-10-12 20:12:43
142
原创 spring mvc集成shiro的web.xml配置详解
spring mvc集成shiro的web.xml配置详解 <?xml version="1.0" encoding="UTF-8" ?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XM...
2019-10-10 21:34:04
203
转载 SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
https://blog.youkuaiyun.com/xiaoyaotan_111/article/details/53817918一 简介(1)过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改Htt...
2019-09-29 17:34:45
479
原创 SqlSession和SqlSessionFactory
SqlSession:应用程序和数据库之间交互的一个单线程对象(非线程安全的),数据库的C、R、U、D及事务的处理接口,select | update | delete | insert | commit | rollback | close | flushStatements等SqlSessionFactory:工厂设计模式,创建SqlSession的工厂。SqlSessionFactory是...
2019-09-25 20:11:31
5244
转载 为什么用注解
本文转载自:http://www.yq1012.com/myweb/2230.html自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如...
2019-09-25 15:17:13
206
转载 为什么要引入注解?
为什么要引入注解?使用Annotation之前(甚至在使用之后),XML被广泛的应用于描述元数据。不知何时开始一些应用开发人员和架构师发现XML的维护越来越糟糕了。他们希望使用一些和代码紧耦合的东西,而不是...
2019-09-25 14:54:40
332
转载 Java多个线程同时访问操作单例对象,需不需要加锁
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
2019-09-23 20:40:04
2381
转载 Spring中自动装配Bytype Byname区别
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
2019-09-23 17:53:51
2177
3
转载 #{} --- ${}
本文摘自三篇文章,觉得有用。※:PreparedStatement不允许在插入参数时改变SQL语句的逻辑结构。※:为...
2019-09-21 15:10:15
334
转载 fastjson解决循环引用和重复引用
什么是重复/循环引用简单说,重复引用就是一个集合/对象中的多个元素/属性同时引用同一对象,循环引用就是集合/对象中的多个元素/属性存在相互引用导致循环。举例说明重复引用List list = new ArrayList<>();Object obj = new Object();list.add(obj);list.add(obj);循环引用// 循环引用的特殊情况,...
2019-09-07 11:36:41
2107
1
原创 Dbutils使用
n. Dbutils使用https://www.cnblogs.com/lihanxiang/p/8475548.html【JavaWeb】DbUtils入门之QueryRunnerDbUtils简介根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关官网上的简介也称之为 JDBC help...
2019-08-28 21:30:52
405
1
原创 Dbutil
package util;import Bean.Student;import java.sql.*;public class Dbutil { private static String driver="com.mysql.cj.jdbc.Driver"; private static String url="jdbc:mysql://localhost:3306/h...
2019-08-26 22:32:08
199
原创 MySQL实现各种约束
mysql数据完整性作用:保证用户输入的数据保存到数据库中是正确的。确保数据的完整性 = 在创建表时给表中添加约束完整性的分类:实体完整性:域完整性:引用完整性: 学生表(学号 ,姓名) 成绩表( 学号,科目,成绩)1.1 实体完整性约束实体:即表中的一行(一条记录)代表一个实体(entity)实体完整性的作用:标识每一行数据不重复。约束类型:主键约束(primar...
2019-08-24 19:19:29
976
1
原创 MySQL连接查询
连接查询连接查询就是求出多个表的乘积,例如t1连接t2,那么查询出的结果就是t1*t2。连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的,不想要的记录呢,当然是通过条件过滤。通常要查询...
2019-08-24 19:17:07
130
原创 杨辉三角
杨辉三角//打印等腰杨辉三角形public class Demo5{ public static void main(String[] args){ //定义二维数组的长度 int length = 10; //声明二维数组 int[][] arr = new int[length][]; //遍历二维数...
2019-08-23 10:50:15
93
1
原创 猴子分桃问题:有5个猴子分一堆桃子,不可以平分,5个猴子都回去睡觉了,晚上, 第一个猴子深夜偷偷起来,丢掉一个桃子,正好可以5个人分...
猴子分桃有5个猴子分一堆桃子,不可以平分,5个猴子都回去睡觉了,晚上,第一个猴子深夜偷偷起来,丢掉一个桃子,正好可以5个人分,于是,他拿掉自己的那份回去了。第二个猴子也起来了,又丢了个桃子,又正好可以5个人分,于是,他也拿着自己的那份走了,后面的3,4,5猴子都是用同样的方法,也都正好。问:至少有几个桃子。public class Demo5 { public static ...
2019-08-23 10:48:51
1578
1
原创 NIO Selector Channel选择器深入理解
Selector和非阻塞网络编程要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。 选择器提供选择执行已经就绪的任务的能力.从底层来看,Selector提供了询问通道是否已经准备好执行每个I/O操作的能力。Select...
2019-08-23 10:34:05
809
原创 选择排序之 各种选择排序
public static void select1(){int[] a={5,12,4,7,13};for(int i=0;i<a.length-1;i++){ //n个元素,i从角标为0的元素开始,向后比较,选择最小的与其交换,因为只需要比较n-1((a.length-1)-i)次就能确定顺序,所以i<length-1int min=a[i];for(int j=i+1;j...
2019-08-22 21:11:43
181
原创 ##### 冒泡排序
冒泡排序如果一共n个数,第几轮为i,则需要比较n-1轮;每轮比较n-i-1次,每次确定一个最大的数 public static void select(){ int[] arr={5,12,4,7,13}; for(int i=0;i<arr.length-1;i++){ //n个元素冒泡排序,一共需要比较n-1轮,所以i<...
2019-08-22 10:02:56
101
原创 插入排序
//外层循环从1开始,内层循环从0开始。 每次内层循环结束,要判断设为指针pos的点是否变动,(pos虽然改变,但是最开始pos的值已经取出放入curr,所以后边依然可以和curr进行比较)如果变了说明在循环时执行了pos--,就说明在指针位置左边有比设为指针位置的值大,并且已经后移,所以,此时把取出的开始指针的值(curr)插入到pos-到的位置(每有一个比指针数值大的值,指针里的值就该往左移...
2019-08-22 10:02:08
93
原创 synchronized和volatile的区别:
volatilevolatile:易变的,不稳定的在并发编程中的三个特性:(1)互斥性(原子性)(2)内存可见性(3)指令重排序volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的;相较于synchronized 是一种较为轻量级的同步策略;volatile 不具备"互斥性";volatile 不能保证变量的"原子性"; volati...
2019-08-21 22:17:13
193
原创 事件冒泡或事件捕获?
事件传递有两种方式:冒泡与捕获。事件传递定义了元素事件触发的顺序。 如果你将 元素插入到 元素中,用户点击 元素, 哪个元素的 “click” 事件先被触发呢?**在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: 元素的点击事件先触发,然后会触发 元素的点击事件。**在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: 元素的点击事件先触发 ,...
2019-08-21 21:50:18
124
原创 CSS选择器
CSS选择器主要用于选择需要添加样式的html元素3.1 基本选择器3.1.1 标签选择器 在head中使用style标签引入在其中声明标签选择器: html标签{属性:属性值},具体示例如下: <style type="text/css"> span{color: red;font-size: 100px} </sty...
2019-08-20 21:19:04
112
原创 Map集合的遍历
使用keySet方法与get方法结合public class Demo { public static void main(String[] args){ HashMap<String, Integer> map = new HashMap<>(); map.put("aaa", 12); map.put("bbb",...
2019-08-19 14:10:52
102
原创 为什么hash结构 重写equals方法必须重写hashcode方法
hashset是由数组,链表和红黑树组成的。为什么重写equals必须重写hashcode?假如只重写equals而不重写hashcode,那么Student类的hashcode方法就是Object默认的hashcode方法,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,显然此时s1!=s2,故两者的hashcode不一定相等。然而重写了equals,且s1.equ...
2019-08-17 20:50:42
154
原创 如何字节流实现readLine()方法
import java.io.InputStream;public class Systemin { public static void main(String[] args) throws Exception{ InputStream is=System.in; int len=0; StringBuilder sb=new Str...
2019-08-16 23:12:11
703
原创 何为面试必问的CAS算法?
在CAS算法中,需要取出内存中某时刻的数据(由用户完成),在下一时刻比较并替换(由CPU完成,该操作是原子的)。这个时间差中,会导致数据的变化。假设如下事件序列:线程 1 从内存位置V中取出A。线程 2 从位置V中取出A。线程 2 进行了一些操作,将B写入位置V。线程 2 将A再次写入位置V。线程 1 进行CAS操作,发现位置V中仍然是A,操作成功。尽管线程 1 的CAS操作成功,但不代表这个过程没有问题——对于线程 1 ,线程 2 的修改已经丢失。
2019-08-16 08:09:28
292
2
原创 这样写,才是100分的懒汉单例模式!
public class SingleTon { private SingleTon(){ //禁止反射破解 synchronized (SingleTon.class) { if (instance != null) { throw new RuntimeException("不能使用反射创建对象"); ...
2019-08-14 20:01:08
107
1
原创 Properties类 冲!
package IO;import java.io.*;import java.util.Properties;public class Properties1{ public static void main(String[] args) { //1.实例化一个Properties的对象 Properties pro=new Properties...
2019-08-13 17:32:50
118
1
原创 什么是死锁,为什么会产生死锁?
** 死锁** 每个人都拥有其他人需要的资源,同时又等待其他人拥有的资源,并且每个人在获得所有需要的资源之前都不会放弃已经拥有的资源。 当多个线程完成功能需要同时获取多个共享资源的时候可能会导致死锁。死锁的条件:1两个以上的线程2至少两个锁以上3同步中嵌套同步/**男孩*/public class Boy extends Thread{ @Override pu...
2019-08-11 15:56:07
1041
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人