自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 SpringBoot自动装配原理

自动装配原理前言一、从问题出发二、阅读源码来解决问题问题1.怎么读取配置内容2.配置内容?3.剔除不需要的配置自己配置前言SpringBoot基本实现了0配置,因为很多东西官网都提供了默认的配置。但是有时候自己写的时候难免还是需要配置一些东西,所以理解她的自动配置原理挺重要的!一、从问题出发提出三个问题,以此来明确接下来阅读的目的:给谁自动配置自动装配的内容怎么筛选这些配置内容。springboot肯定提供了所有的配置内容,我们不可能加载所有的默认配置到一个基础项目中(比如一个hel

2020-10-29 20:29:45 223 1

原创 八大排序

插入排序时间复杂度O(n^2)基本思路:把数组分成俩个部分,一部分是已排序数组,另一部分是未排序的数组,每次从未排序的数组中取到一个,插入到已排序数组中合适的位置。实现:找到这个新数(下标为i)将要插入到的位置j。把下标[j,i - 1]的元素整体往后移一位。private static int[] insertSort(int[] arr){ for (int i = 1; i < arr.length; i++) { int j;

2020-09-24 16:28:06 112

原创 jdk和cglib代理过程详解

首先代理的目的都是一样的:就是不修改源代码的基础上,对以有的代码进行扩展。jdk和cglib实现的手段是不一样的。jdk代理是java本身类库包含的一种代理模式,不需要自己导入jar包。下面程序的目的就是返回一个目标类对象target的一个代理对象,target是实现了一个接口的。package com.mec;import com.mec.IDoSomething;public class Target implements IDoSomething { public Target

2020-07-16 01:32:24 180

原创 Session结合Filter防止盗号

Cookie和Session首先讲述:Cookie和SessionCookie和Session都是一个会话技术。HTTP协议是一个无状态的协议,web应用的服务器和客户端保持的是短连接,也就是一次请求后就会断开连接。而有时候我们需要在前一次连接数据的基础上进行下一次连接,这就需要用到我们的会话技术。Cookie是被保存在客户端,一般保存一些用户自己的设置。一个浏览器和服务器进行的一次会话会产生一个Cookie,这个Cookie可以被保存在文件中实现持久化,也可以设置这个保存的时间。这样我们下次请求

2020-06-29 13:24:00 3624

原创 序列化和反序列化问题及序列号的作用

首先序列化的是对象不是类。Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象,前提是虚拟机可以得到这个类。看到有人说那既

2020-05-31 10:37:40 1513

原创 JavaScript原型和原型链图文解析

什么是原型和原型链不再赘述。由之前的博客,知道可以得出如下俩个结论:对象的原型链和该对象对应的类的原型指向同一空间子类对象的原型中的原型链和父类的原型指向同一个空间。直接看父类和子类之间、普通类和Function,Object类之间的原型和原型链之间的关系。Function类注意是大写的Function,那么这个和function有什么区别呢?之间说function定义的内容,既是函数也是类,还是对象。这个function定义的对象就是Function类的对象,上述第一条结论得出,Func

2020-05-08 22:30:28 158

原创 巧妙处理Swing模态框setVisible(true)线程阻塞的问题

这篇博文是讲的是一个思想,顺便记录一下Java Swing模态框的学习。假设存在这样场景:我登录lol页面的时候,艾欧尼亚一区人很多,我连着点登陆,客户端没给我反应,我靠!竟然没反应,然后我就疯狂点登陆,假设lol服务器无法处理这种重复命令,那么lol的服务器反应过来的时候,可能我已经点了n次登陆了,那么服务器就要处理很多没有意义的登陆指令。这只是一个假设,就是为了说明,有些用户操作的不当,造成...

2020-04-29 21:02:45 933 1

原创 分布式框架RPC的实现

概述RMI: Remote Methed Invoke 远程方法调用客户端和服务器通信之间,很多情况是:客户端发送请求,而这个请求到了服务器,实际上是要根据这个请求的一些参数,在服务器上执行方法并得到“响应”。RMI技术:服务器的方法"直接"在客户端执行。而实质上,该方法只在服务器端存在真正的本体。大致过程给出一个接口,这个接口中都是能被远程调用的方法。客户端中,用到代理机制。代理机...

2020-04-25 19:35:36 184

原创 【模拟Spring】IoC对接口的处理

使用IoC时,有时会碰到需要注入接口类型。看下面这个例子,判断是否能注入成功:实现类@Componentpublic class ITestImpl implements ITestInterface{ public ITestImpl(){ } @Override public void printfSomeThing() { System.out.println("这是p...

2020-04-12 22:00:20 155

原创 【模拟Spring】处理带Bean注解的有参方法

继前一篇博文。把bean放入到beanPool中更灵活的方式是通过给方法加@Bean注解,把方法返回值封装成一个bean,put到beanPool中。思考处理有Bean注解且含有参数的方法的关键:方法所依赖的参数是否满足?满足:反射机制执行这个方法,并且把把返回值放入beanPool不满足:应该把不满足的方法封装成一个MethodDefinition存起来。而且当有一个新的bean被...

2020-04-12 18:05:02 748

原创 Spring的Ioc详细解析加模拟

IoC概念控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(很少用,反正我不知道)。通过控制反转,对象在被创建的时候,不再是new,而是从IoC池子中获取。实现Ioc扫描一个包,把所有需...

2020-04-10 11:16:02 114

原创 自制定时器

编程时,肯定会碰到等待几秒之后执行某块代码这样的场景。于是就打算自制一个精准的定时器类。首先,这个定时器必定不能影响其他代码的执行过程,因此这个定时器本身应该是一个线程,只需要提供需要间隔的秒数和时间到了要进行的操作(完成抽象方法doSomething();),然后只需通过调用这个类中的startup方法,让这个线程跑起来,定时器就会开始计时,并且当经过指定的时间,会执行doSomething...

2020-04-03 18:16:50 443

原创 字节实习一个月

前言2020.12.9实习入职北京字节跳动服务器端,开始了梦寐以求的搬砖生活感受首先说一下为什么写这篇博客。这周是双休,放假的日子很无聊,不想看书,也不想看文档,但是又觉得这样不好。实习一个月,觉得自己都在熟悉业务,虽然觉得自己成长挺快,但是实际技术上的增长并不是那么明显,所以觉得不能这样下去,想给自己接下来的日子一点安排。上班感受:福利很好,伙食太棒了,网上说的都是真的节奏挺快的,到了3天还不熟悉golong就开始给排期第一个星期完全不适应(可能是golong没学就去原因)团队氛围真的很

2021-01-31 19:14:43 533 1

原创 二叉树中的递归

二叉树中感觉用到递归真的是很多很多,基本很多的算法题都是用到了递归方法来求解。有几个套路是必须要掌握,不然力扣简单题都够呛。首先我觉得递归需要注意问题有以下几个:方法的返回值。返回值被用到的地方可能有俩个,第一个是这个递归顶层的返回值就是最后需要的值,第二个是上层递归需要用到下层递归的值。方法体。也就是本层递归我们需要关注的操作,忽略掉其他因素,我们只对当前层的内容进行操作。方法参数,方法体中需要进行操作,比如交换,合并,这些都是基于本层递归中提供的参数前提下的,所以参数的选择也很重要,一般如果

2020-11-29 22:31:55 254

原创 过滤器、监听器、拦截器

过滤器实现javax.servlet.Filter接口就是一个过滤器了,显而易见在servlet容器中,生命周期和容器相同。主要是统一设置字符集,对于所有的请求进行一个过滤。监听器实现javax.servlet.ServletContextListener,主要是当某种时间发生时进行侦听器内的代码执行。也是在servlet中的拦截器拦截器运用比较广泛,更加灵活。aop的思想。过滤器是通过方法的回调来实现,而拦截器通过动态代理实现,可以深入方法内部。在不同的场景都适应,比如方法运行前,后,异常等等

2020-11-01 18:04:16 147

原创 蓝桥杯Java B组历年真题+解析

以下为历年卷子和我写的题解,如有错误望能指正。第七届省赛Java B组第八届省赛Java B组第九届省赛Java B组第十届省赛Java B组第十一届省赛第一次模拟第十一届省赛第二次模拟官方真题+资料想在第十一届比赛能拿个奖,所以刷一遍这些题。...

2020-10-08 23:14:59 1464

原创 第十届蓝桥杯省赛Java B组真题解析

以下为第十届蓝桥杯省赛Java B组真题加我的题解,如有错误望指正。

2020-10-08 23:04:29 717 3

原创 第十一届蓝桥杯大赛第二次模拟(软件类)真题

以下为第十一届蓝桥杯大赛第二次模拟(软件类)真题加我写的题解,如有错误望指正。

2020-10-08 22:59:26 376

原创 第十一届蓝桥杯大赛个人赛校内选拔(软件类)真题解析

以下为第十一届蓝桥杯大赛个人赛校内选拔(软件类)真题加上自己刷的时候写的题解,如有错误望指正。

2020-10-08 22:58:23 708

原创 volatile关键字作用

缓存一致性首先计算机的主存和cpu之间的数据交互是非常频繁的,现在的cpu速度普遍比主存的速度高很多倍。所以为了缓解速度差异太大这种情况,在主存和cpu之间引入一个高速缓存区。这个高速缓存区其实是cpu单独开辟了一块内存区域用来缓存经常需要和主存交互的数据。当cpu需要某个数据时,先从缓存区中找数据,如果没有,就再去主存中找。其中这个缓冲区可能分成1级缓存,2级缓存,3级缓存。再说一个,现在的电脑一般都是多核的,就是有好几个cpu,而每一个cpu都会有一个其单独的高速缓存(本身cpu的一个内存空间),

2020-07-24 13:35:32 216

原创 泛型快速回顾

先思考这样一个题: 讲一下泛型?他是在编译时起作用还是运行时起作用。如果写一个泛型,我运行的时候,通过反射,往里面写一个int类型,这个会报错么?首先泛型是在编译时起作用,在运行时,运行的是.class文件。.class文件中是没有泛型,是java的泛型擦除机制作用。反射是运行时的操作。我们把问题具体一点,通过反射往list容器中写一个int类型元素,而且这个list创建时泛型是Stringpublic class TestForGeneric { public static void m

2020-07-18 19:10:45 456

原创 ServletContext对象简单介绍和基本应用

每一个web应用有且仅有一个ServletContext对象。从这句话中可以看出,这个对象和服务器相关,且生命域很长。怎么获取:俩种方法,获取到的是同一个对象,因为这是同一个web应用。@WebServlet(name = "Servlet")public class Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) thro

2020-06-27 11:42:06 171

原创 手写一个线程安全的单例工厂模式

简单介绍一下俩个模式单例模式:一个类只会被产生一个静态的对象。工厂模式:构造方法不对外提供。提供一个方法,包括产生对象和对对象的初始化。同时保证多线程获取对象时,获取的是同一个对象。public class Resource { private static Map<ResourceInfo, SourceFileList> resourcePool; private static volatile Resource me; private Resource()

2020-06-04 20:50:40 1357

原创 处理断点续传的算法

需求分析《多文件云传输》项目中有这样一个应用背景:文件的发送是按照已定的规则被拆分成好几个片段,每一个片段包括文件的编号和这个片段首字节在整个文件中的偏移和这个片段的长度。提供这三个信息,是为了接受时能根据这些信息,把片段再写回成一整个文件。但是文件的发送并不是每次都能够成功,可能某一个发送方在发送时,突然掉线,那么接受时,某个文件可能就会缺少一个片段。我们把接下来发送未发送的片段这个操作称为断点续传。那么如果我们要进行断点续传,首先,我们要统计出是哪个片段的确实。接下来这个算法就是用来统计未发送的

2020-06-04 11:02:55 544

原创 Eclipse和idea相对路径不匹配问题

如果你是从eclipse转到idea,明明eclipse中能找到的文件路径,到了idea就不行了。你可以看看我的解释,能不能帮到你。用绝对路径的话,idea和eclipse都是没问题的。但是,相对路径idea会出现文件路径找不到的问题。这个相对路径是从eclipse赋值过来的,那是可以用的。eclipse当前路径是从src开始,所以这个路径在eclipse中是没问题的。但是这个放到idea中,因为我这个是一个模块,可能许多模块才能组成一个项目。idea查找文件的话,默认是从项目的工作空间开始,

2020-05-28 19:37:40 1600

原创 服务发现思想及原理

头一听这个名词觉得很高级,其实理解了原理思想和他的应用就觉得不是那么高深。下面听我娓娓道来。没有服务发现情况下首先看下面这个单服务器模式:多服务器版:客户端与服务器连接有一个基本的要求,不管是长连接还是短连接,客户端都需要知道服务器的ip和port。如果服务器很多,你要把所有的服务器配置都写在配置文件中。如果增删服务器,那你还要去刷新客户端的配置文件,怎么刷新呢?如果是长连接,那么可以由服务器发送,但是如果是短连接呢?可以实现,但是很复杂。加入服务发现服务发现基本原理:在客户端和服

2020-05-19 16:52:18 463

原创 HashMap源码解析(一)

第一篇博客先走完主题的思路,对于一些分叉留到之后的文章中。首先从put开始。对于放入键值对,根据对象自身的hashcode方法得到对象的哈希值(命名为hash)。hashcode方法继承自Object类,可以对其进行重写。底层数据结构是数组+链表+红黑树,先不谈红黑树。根据这个hash值和默认的数组长度(假设是第一次put),计算出这个hash值在这个数组中存放的下标值。如果对应数组对应下标元素不为空,则会根据这个数组元素为头结点,下面挂一个链表。冲突的就放在链表中,1.7版本采用头插法来存放新的元素,

2020-05-15 00:02:02 177

原创 Java线程池的核心思想解析

下面讲述java内置线程池的核心思想,并给出一个简单的程序模拟这个思想。创建线程池的目的线程的创建和销毁代价是昂贵的。耗费资源:线程栈是在java堆外的,默认一个线程栈为1M空间,如果线程创建过多,内存空间会马上被消耗完。操作系统要做的事:给它分配内存、列入调度。如果是RMI机制下服务器和客户端之间的短连接。那么对于客户端的一个请求,服务器都会创建一个线程来响应这个请求,处理完这个请求就马上销毁线程。这样就会非常频繁的创建和销毁线程,是耗时,耗资源的。因此,就有了线程池的这个解决方案:先创建一

2020-05-11 11:22:23 323

原创 按字编址和按字节编址

类型1.undefined类型2.number类型是数值类型3.string类型是字符串类型4.boolean类型是逻辑类型5.object类型是对象类型6.function类型是函数类型7.JSON对象(类似于map)js查看表达式的数据类型的关键字是:typeofjs中不区分int、short、float等,统称number类型;关于关系运算:"==" 是不严格相等...

2020-04-29 20:12:50 23395 11

原创 【Java】网络连接中二进制数据的传输

规范信息规范信息就是让客户端和服务器之间发送的消息遵守一个规范,类似于一个协议。于是,建立一NetMessage类,其中给出消息的各种参数,规定只能发送NetMessage类。这样做可以方便读取和解析,可以从下面代码中体会到。public class NetMessage { //BIN为二进制类型信息,STR为字符串类型信息 public static final int BIN = 1...

2020-04-03 00:36:09 1359

原创 【JAVA】B/S模式下服务器采用“轮询”方式的短连接

什么是长连接和短连接长连接:所谓长链接是客户端和服务器通过三次握手建立起一个连接,客户端和服务器都不会主动去断开这个连接,而是用一个侦听线程不断侦听着对端发送来的消息。短连接:当需要传输信息时,建立一个连接。客户端发送请求,服务器响应。结束之后连接就断开。客户端和服务器都不存在线程侦听对端消息。B/S模式下的短连接B/S模式下,采用上述短连接方式,浏览器向服务器去请求资源,每请求一...

2020-04-02 21:51:06 188

原创 【C】位运算

位运算~ 按位取反& 按位与| 按位或^ 按位异或(同则为0,异则为1)<< 左移>> 右移一些特殊的等价运算:x & 7 <=> x % 8x / 2 <=> x >> 2x * 2 <=> x << 2对于位运算的处理,必须要掌握的是:二进制,补码。注意事...

2019-11-24 22:54:28 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除