自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 时隔一年半。。。

大体上是蛮幸运的,又要去新的单位工作了,第一份事业编的工作做得真的很痛苦,大概是因为丢掉了专业技能吧,遂决定居安思危,坚持学习!大概一年半的时间没登录,经历了蛮多事情,包括不满,辞职,备考,笔试,面试…

2024-05-26 22:08:45 434

原创 毕业小半年

随想

2022-11-17 15:23:28 266 1

原创 对研二的总结

4月初得到了一个实习机会后,自己就专心去做实习的事情,还有准备毕业的东西了,现在实习结束后一看,竟然有差不多5个月没写过博客了,想到了这一点,好像不写点东西,心里有点空落落的,于是就有了这一篇为了写而写的文章。去年这个时候是焦虑的,明明一直在学习,却有种有力使不上的感觉,不知道自己能干嘛,也不知道自己想干嘛,对于如何达到毕业条件也一无所知。现在再回头看一下,我真的是一个很幸运的人,有一个平易近人的导师,允许我自己研二去外面自己摸索,自己实习了一年,接触了现实的社会后慢慢把心沉了下来。认识了在论文上给予了我

2021-07-29 14:02:05 294

转载 【回顾】对SQL调优的初步理解

一、一般情况下的SQL优化对于单表查询的SQL,如果跑的慢,十有八九是因为那个SQL没有使用索引,第一步可以先去查看MySQL的执行计划,看看哪个SQL有没有用到索引,如果没有,就改写一个SQL让它去用上索引,或是额外再加一个索引。二、执行计划如何查看执行计划?如:explain select * from table;得到的结果为:table | type | possible_keys | key | key_len | ref | rows | Extratable:那个表type

2021-02-23 15:59:56 220

转载 【回顾】MySQL锁原理的初步理解

一、MySQL锁的简介(1)一般MyISAM引擎会加表锁,进行查询的时候,会默认加个表共享锁,也就是表读锁,这个时候别的数据库连接只能到该表来查数据,不能写数据;在进行写操作的时候,MyISAM引擎会加个表的独占锁,也就是表写锁,别的连接不能读也不能写;MyISAM这样的页级锁,一般很少用了。(2)InnoDB引擎一般使用行锁,有共享锁和排他锁两种,共享锁:多个事务都可以加共享锁读同一行数据,但是别的事务不能写这行数据;排他锁:只有一个事务可以写这行数据,别的事务只能读,不能写;对于inser

2021-02-23 12:39:09 176

转载 【回顾】MySQL索引的实现原理(二)

一、索引的使用规则假设有一个SQL语句:select * from table where a=1 and b=2 and c=3,要怎么建立索引,才可以确保这个SQL语句能使用到索引来进行查询?答:引入索引最左前缀匹配原则的概念:与联合索引相关联,很多时候索引是针对几个字段来建立的;假设要对一个商品表按照店铺、商品、创建时间三个维度来进行查询,那么就可以将这三个字段建立一个联合索引:shop_id、product_id、gmt_create;create index (shop_id,produ

2021-02-23 00:30:56 108

转载 【回顾】MySQL索引的实现原理(一)

一、索引的数据结构索引说白了就是用一个数据结构组织某一列的数据,然后如果你要根据那一列的数据进行查询的时候,就可以不进行全表扫描,只要根据那个特定的数据结构去找到那一列中的值,然后却找到相对应的记录的物理地址即可。MySQL的索引是使用B+树这种数据结构来实现的,要解释B+树,首先要解释清楚B-树:比如我们现在有一张表:{id intname varcharage int}我们现在对id建了一个索引,这些值就存在了如上图的B-树中,B-树是一种排好了序的数据结构;要查找id为某个值的记

2021-02-22 20:52:25 104

转载 【回顾】MySQL中的MyISAM引擎与InooDB引擎

MySQL的存储引擎:使用不同的存储引擎,数据文件在磁盘上的存储方式是不一样的;也支持不同的功能。MySQL支持的存储引擎有很多种,其中InnoDB与MyISAM问得比较多。一、MyISAM存储引擎不支持事务,不支持外键约束,索引文件和数据文件分开,这样在内存里可以缓存更多的索引,对查询的性能会更好,适用于少量插入,大量查询的场景。比较适合使用MyISAM引擎的场景,最经典的是报表系统:比如大数据的报表系统,给大家画个图聊聊一半都是怎么玩儿的,常见的就是走hadoop生态来搞,hdfs来存储数据

2021-02-22 19:52:05 107

转载 【回顾】对volatile关键字的简单理解(1)

一、Java内存模型比如有一个类:public class HelloWorld{ private int data = 0; public void increment(){ data++; }}HelloWorld helloWorld = new HelloWorld();//对象放在堆内存中,包含实例变量假设有2个线程,去调用同一个helloWorld对象的increment方法://线程1new Thread(){ public void run(){ helloW

2021-02-16 17:26:24 74

转载 【回顾】对线程池工作原理的简单理解

前言一个使用Java开发的系统,一般情况下是不允许无限制地创建线程的,会去创建一个线程池,其中有一定数量的线程,让它们去执行各种各样的任务,线程执行完任务之后,不要销毁掉自己,而是继续去等待执行下一个任务。线程池工作的原理简单创建线程池的方法如:ExecutorService threadPool = Executors.newFixedThreadPool(3);//提交任务threadPool.submit(任务);原理:1、提交任务时,先判断线程池中线程的数量是否小于corePool

2021-02-12 20:18:41 114

转载 【回顾】对AQS实现原理的简单理解

首先,AQS是并发容器J.U.C(java.util.concurrent)下locks包内的一个抽象类;实际上是用于实现:当多个线程同时来进行加锁时,只有一个线程可以成功,剩下的未成功的线程会进入到等待队列中进行等待。如果有多个线程同时访问一个共享数据,为了保证共享数据的安全性,可以使用synchronized关键字进行加锁,也可以使用基于CAS机制的并发包中的类,并发安全的数据结构(如ConcurrentHashMap),Lock类;Lock类,如://公平锁ReentrantLock loc

2021-02-12 19:54:37 146

转载 【回顾】JVM对锁优化的简单理解

从JDK1.6开始,JVM对synchronized锁进行了很多优化;一、锁消除在编译的时候,JIT编译器会通过逃逸分析技术,分析synchronized锁对象是不是只可能被一个线程加锁,没有其他的线程来竞争加锁的话,编译的时候就不用加入monitorenter和monitorexit的指令了;相当于是消除了这个锁,从而提升了这段代码的执行效率,因为可能就只有一个线程会来加锁,不涉及到多个线程来竞争。二、锁粗化在编译的时候,如果JIT编译器发现代码里有连续的多次加锁释放锁的代码,就会合并为一个锁,

2021-02-12 16:27:37 117

转载 【回顾】对ConcurrentHashMap底层原理的简单理解

前言写代码时,可能会有多个线程去访问同一个数据,可以通过synchronized加锁或者CAS机制去进行安全的累加,去实现多线程场景下安全更新一个数据的效果;比较多的场景下,可能有多个线程同时去独写一个HashMap,HashMap底层是一个大的数组,如果在并发的场景下将HashMap加锁,代码如:HashMap map = new HashMap();//多个线程场景下,线程1put的位置为数组[5],线程2要put的位置为数组[21]synchronized(map){map.put(xx

2021-02-12 10:59:34 490

转载 【回顾】对synchronized关键字底层原理的简单理解

一、基本用法synchronized是用来保证线程间的同步的一个关键字;类中包含的一段代码:synchronized(myObject){//代码synchronized(myObject){//代码}}类中包含的另一段代码:synchronized(otherObject.class){}可以对一个对象进行加锁,也可以对一个类进行加锁;二、实现原理在synchronized进行加锁的时候,会对应一个monitorenter加锁的指令,加锁完毕之后会对应一个monitorexi

2021-02-11 23:30:10 100

转载 【回顾】浅谈XSS网络攻击的原理

前言XSS攻击和SQL注入是大部分黑客进行网络攻击的手段,XSS的全称是Cross Site Script,就是跨站点脚本攻击,也就是说,黑客恶意篡改你的网页的前端代码,在里面注入一些他自己的html+javascript的脚本和代码。一、反射型的XSS攻击1、当你点击了黑客的URL链接,在这个URL链接里嵌入了黑客的恶意脚本,当你点击那个URL链接后,会指向黑客自己的服务器上的一段恶意脚本;2、随后恶意脚本被返回到你的浏览器里运行,进而控制你的浏览器里的行为;3、一旦一个恶意脚本控制了你的浏览

2021-02-01 11:00:30 322

转载 【回顾】Java开发的系统可能会遇到的安全问题

Java开发的系统可能会遇到的安全问题1、系统可能被黑客以哪些方式来攻击呢?2、XSS攻击方式背后的原理是什么,SQL注入背后的原理是什么,等等,各种攻击方式背后的原理是什么?3、针对常见的黑客攻击方式,你平时开发的时候有哪些方案可以保护你的系统安全,避免被黑客攻破;4、平时微服务架构里,网关系统用的是什么?在网关层面如何防止黑客攻击?5、你负责的系统的一些接口,如何保证接口的安全性呢?6、常见的加密算法,公钥密钥是什么?如何进行加密的网络通信?如何进行数据加密?7、除了公钥密钥以外,有没有一

2021-01-31 17:25:39 554

转载 【回顾】浅谈HTTP协议中的短连接与长连接

http1.0的时候,底层的tcp建立的连接是短连接,一个网页发起的请求,每个请求都是先进行tcp三次握手,发送请求,获取响应,然后tcp四次挥手断开连接;每个请求,都会先连接再断开;短连接:建立连接之后,发送个请求,连接就直接断开了;http1.1的时候,tcp三次握手建立连接后,无论有多少次请求都是走一个tcp连接的,走了n次请求后,tcp连接被释放掉;http1.1的时候,底层走的就是tcp的长连接;长连接:建立连接后,发送n多个请求,连接才会断开。...

2021-01-31 11:30:12 82

转载 【回顾】HTTPS工作原理的简单理解

前言http协议都是明文的,是没有加密的,风险比较大。现在大部分应用都是用https协议的:之前是基于SSL协议对http进行加密,后来又升级到了TSL协议来加密。https的工作原理1、浏览器把自己支持的加密规则发送给网站;2、网站从这套加密规则里选出来一套加密算法和hash算法,然后把自己的身份信息用证书的方式发回给浏览器,证书里面包含网站地址、加密公钥、证书颁发机构等;3、浏览器验证证书的合法性,然后浏览器地址栏会出现一把小锁;浏览器接着生成一串随机数密码,然后用证书里的公钥进行加密,

2021-01-31 10:59:01 95

转载 【回顾】对TCP三次握手与四次挥手机制的简单理解

TCP协议是处于传输层的协议一、TCP三次握手过程(建立连接)客户端与服务端通过传输层的tcp协议建立网络连接时,需要经历三次握手的过程;三次握手的期间,需要用到TCP报头中的几个标识:ACK、SYN、FIN;1、第一次握手,客户端发送连接请求报文,此时Tcp报文头部中的SYN=1、ACK=0,表明这是个连接请求,seq=x,客户端变为SYN_SENT状态,等待服务器响应;2、第二次握手,服务端接收到SYN=1的请求报文,需要返回一个确认报文,ack=x + 1,SYN=1,ACK=1,seq=

2021-01-30 18:05:58 126

转载 【回顾】浏览器请求www.baidu.com的大概全过程

前言当浏览器发送一个请求到你所访问的网站的机器,响应的过程是怎样的呢?假设我们电脑的相关配置为:ip地址:192.168.31.37子网掩码:255.255.255.0网关地址:192.168.31.1DNS地址:8.8.8.8请求发送与响应的过程1、当浏览器发送请求去访问www.baidu.com时,首先会到DNS服务器进行对域名的解析,返回相应的ip地址给浏览器,如:接着会判断两个ip地址172.194.26.108与192.168.31.37是不是一个子网的;2、这两个ip地址明

2021-01-30 12:52:29 1702

转载 【回顾】对如何调整JVM参数的简单理解

一、如何在tomcat中配置JVM参数如果是用tomcat部署你的java web系统,tomcat就是jvm对应的进程,系统中的Java代码是在tomcat的jvm进程中执行的;比如通过java命令直接启动你的一个main方法跑起来的系统,启动的时候java命令会带上一些jvm参数;首先对自己系统的jvm参数要了解,如:1、内存区域大小的分配;2、每个线程的栈大小;3、metaspace的大小;4、堆内存的大小,年轻代和老年代分别的大小,eden和survivor区的大小分别是多少;如果没

2021-01-29 12:01:56 182

转载 【回顾】JVM垃圾回收机制的初步理解

一、引言如果tomcat中有很多正在并发执行的线程,在并发执行我们的代码,每个线程在执行代码的过程中会不停地在堆内存中创建对象。那么就会出现一个问题:JVM地内存大小是有限制的,内存是很昂贵的资源;因为栈内存和metaspace区域也需要空间,对于2核4G的机器,堆内存一般在2GB左右;4核8G的机器,堆内存一般在4GB左右;如果堆内存满了,就会去进行垃圾回收,去干掉一些不需要的对象,把内存空间腾出来。二、内存分代的模型把内存分为年轻代和老年代;年轻代又可以分为Eden区、Survivor区,

2021-01-28 16:44:49 82

转载 【回顾】JVM是如何运行起来的

JVM中会有线程去执行我们写的代码;比如我们有一个类里面包含了一个main方法,去执行这个main方法的时候,会启动一个jvm进程,他会默认有一个main线程,这个main线程就负责这个main方法的代码,进而创建各种对象;在tomcat中,类的信息都会加载到jvm里去,spring容器会对我们的类进行实例化成bean,有工作线程会来执行我们的bean实例对象里的方法和代码,进而也会创建其他的各种对象,实现业务逻辑。JVM的工作流程:1、我们写的系统中的代码,放在了一个war包里面,则类加载器会从

2021-01-28 12:16:20 184

转载 【回顾】JVM中主要的内存区域划分

前言我们基于框架写了一些代码之后,就会把代码进行部署,一般来说是通过tomcat来部署java web的系统;tomcat自己就是基于Java来开发的,我们启动的tomcat是一个jvm的进程,我们写的程序只不过是一些代码,放在tomcat目录里,就会被tomcat加载到jvm里去,tomcat去负责接收请求,执行我们写好的代码。一、Java8以前JVM的最核心的内存区域比如我们在系统中写了很多类,1、类需要被加载到JVM的永久代里面去;2、请求过来的时候,JVM需要有自己的线程来执行,每个线

2021-01-28 11:26:11 54

转载 【回顾】HashMap的底层数据结构

假设一段代码:HashMap<String, String> map = new HashMap<String, String>();map.put(“张三”, “测试数据”);map.put(“李四”, “测试数据”);一、HashMap底层数据结构最核心的是数组,简单的理解如:对张三这个key,计算出hash值,对hash值进行取模处理,定位到数组里的一个元素中去[<>, <>, <>, <张三, 测试数据>, &lt

2021-01-27 19:52:11 125

转载 【回顾】HashMap的重要性

为什么在面试中会深入考察HashMap?Java工程师需要通过写Java代码,来实现一些逻辑的运转,比如:后端接收到一个请求,可能会创建一些数据结构,来存放一些数据,做一些循环、跳转、判断、加加减减之类的数据处理工作,通过一大堆的逻辑处理,完成系统或软件的一些功能。在完成这些逻辑处理的过程中,可能会不可避免的涉及到HashMap这一数据结构,使用HashMap进行一定的逻辑的处理。总结写代码的时候必然会用到一些数据结构,其中尤为经典的就是HashMap,所以会考察...

2021-01-27 11:36:35 260

转载 【回顾】SpringBoot工作机制的简单理解

SpringBoot是Spring框架发展到了一定阶段之后的产物;一、SpringBoot对开发流程的简化在早些时候,我们是使用spring框架,整合上mybatis和spring mvc框架去进行开发,然后打包部署到线上的tomcat里去,tomcat启动了之后,就会接收http请求,将请求转发给spring mvc框架,分发到特定的controller中进行处理;后来发现,在进行java web开发的时候,还可能整合进来一些比如redis、elasticsearch、还有很多其他的一些东西;国外

2021-01-26 16:35:15 134

转载 【回顾】SpringMVC工作原理的简单理解

SpringMVC的工作机制:(1)tomcat的工作线程将请求转交给spring mvc框架的DispatcherServlet;(2)DispatcherServlet查找@Controller注解的controller类,我们一般会给controller加上@RequestMapping的注解,标注哪些controller用来处理哪些请求,此时根据请求的uri,去定位到哪个controller来进行处理;(3)根据@RequestMapping去查找,使用这个controller内的哪个方法来进

2021-01-26 10:46:30 149

转载 【回顾】Spring中使用了哪些设计模式

一、工厂模式工厂模式的解释:假设有一个类:public class MyController{ private MyService myService = MyServiceFactory.getMyService();}一个工厂类:public class MyServiceFactory{ public static MyService getMyService(){ return new MyServiceImpl(); }}工厂模式就是把一个对象的创建封装在一个

2021-01-25 19:46:14 136

转载 【回顾】Spring容器中,Bean的生命周期

Spring容器在启动的时候,会去扫描并创建你的xml配置文件配置或者注解注释的bean;如果涉及到AOP面向切面编程,还会涉及到动态代理类的创建。bean的生命周期(1)实例化Bean:当要去使用一个bean时;(2)设置对象属性(依赖注入):需要去看你的这个bean依赖了谁,把你依赖的bean也创建出来,给你进行注入,比如通过构造函数、setter方法注入;如:public class MyService{private MyDao myDao;public MyService(MyD

2021-01-25 17:52:32 53

转载 【回顾】Spring中的事务处理机制

一、事务的实现原理就是在要开启事务的方法上加上一个@Transactional注解,当加上之后,spring会使用AOP的思想,对你的这个方法在执行之前,先去开启事务,执行完毕之后,根据你的方法是否报错,来决定回滚还是提交事务。如:@Transactional(propagation = Propagation.REQUIRED)public void method(){ //其他操作}二、事务的传播机制比方说有一个方法A和一个方法B,方法A上面加了一个事务的注解,方法B上面也加了一个事务

2021-01-25 16:33:34 97

转载 【回顾】Spring容器中的Bean是线程安全的吗?

一、Spring中Bean的作用域范围1、singleton:默认,每个容器中只有一个bean的实例;2、prototype:为每一个bean请求提供一个实例;3、request:为每一个网络请求创建一个实例,在请求完成后,bean会失效并被垃圾回收器回收;4、session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效;5、global-sessioin;二、示例比如有一个service类:@Servicepublic

2021-01-24 19:18:21 235

转载 【回顾】cglib动态代理和jdk动态代理的区别

动态代理:动态的创建一个代理类出来,创建这个代理类的实例对象,在这个代理类里面,所有方法的调用,都是先走代理类的对象,它负责做一些代码上的增强,再去调用你原本的那个类中的方法。比如你对一批类和它们的方法做了一个切面,定义好了要在这些类的方法里增强的代码,spring必然要对那些类生成动态代理,在动态代理中执行你定义的一些增强代码;1、如果你的那批需要进行代理的类,是实现了某个接口的,那么Spring AOP就会使用jdk动态代理的方式,来生成一个跟你实现同样接口的代理类,构造一个实例对象出来;2、

2021-01-24 11:43:05 159

转载 【回顾】Spring AOP机制

Spring核心框架里面,最关键的两个机制,就是IOC和AOP,根据xml配置或者注解,去实例化所有的bean,管理bean之间的依赖注入,让类与类之间解耦,维护代码的时候可以更加轻松便利。Spring已经管理了我们代码里所有类的对象实例,如以下两个交由Spring容器管理的类,每个业务方法内可能都有多个增删改的操作:@Controllerpublic class MyController{ @Resource private MyServiceA myServiceA; public v

2021-01-23 19:49:52 83

转载 【回顾】Spring IOC机制

Spring IOC一、当没有Spring IOC机制时如果要写一套系统,假设使用tomcat作为web服务器,启动后,它就可以去监听一个端口号的http请求,然后可以把请求转交给特定的servlet或者jsp。如图所示:当在Servlet中对浏览器发送过来的http请求进行处理时,就有可能出现问题:public class MyServlet{private MyService myService = new MyServiceImpl(); public void doPost(H

2021-01-23 16:32:07 111

原创 【回顾】SpringMVC(1)

概述SpringMVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。为什么要学习SpringMVC呢?1、轻量级、简单易学;2、高效,基于请求响应的MVC框架;3、与Spring兼容性好,无缝结合;4、约定优于配置;5、功能强大:RESTful、数据验证、格式化、本地化、主题等;6、简介灵活;SpringMVC执行原理作用是将请求分发到不同的处理器,DispatcherServlet是一个实际的Servlet。Spring的web框架围绕Di

2021-01-15 16:54:45 100

原创 【回顾】什么是MVC框架

MVC: 模型(dao, service) 视图(jsp) 控制器(servlet)MVC是一种软件设计规范,是通过将业务逻辑、数据、显示分离的方法来组织代码。MVC的主要作用是降低了视图与业务逻辑间的双向耦合。model层的作用:1、编写业务逻辑;2、保存数据的状态;view层的作用:1、显示页面;controller层的作用:1、取得表单数据;2、调用业务逻辑;3、转向指定的页面。...

2021-01-15 10:58:29 628

原创 研二上学期实习期结束的总结

工作中的不足1、Git在自己分支上进行开发,然后合并到master主干时总是卡壳;2、对dao层的api操作不熟悉,参与的项目主要用到MongoDB和Neo4j图数据库,单个记录的增删改查肯定是不用说的,但对于一些复杂的业务需要,相关方法的应用还是相当不熟练;3、自己写的代码比较杂乱,不具备很高的维护性,比如一开始总是习惯在controller层写业务代码,然后service层就调用个dao层,对于提高自己代码的可读性和可维护性,还要努力下功夫才行;4、写业务逻辑吃力,可能是我不够聪明吧0.0。总

2021-01-15 10:06:41 158

原创 近期的一些学习感悟

开始实习终于走出学校这座象牙塔了,通过面试进入了一个不大的公司,开始了Java后端实习生活。研二开始之后我感觉自己闲得一批,又不想走学术这条路。天天在学校闲逛,就算是5A级景区,天天逛也没意思了。于是开始投简历找实习。说实话,找实习那段时间我整个人都是心浮气躁的,面试了4家公司,比较大型的也毫无意外地被面试官虐得体无完肤,不过运气还是很好,得到了一个实习机会。实习后的感悟现在已经实习了20天左右了,最大的感想就是心能慢慢沉下来了。可能是因为有任务,不得不完成的原因,一些之前我懒得动手的细节,

2020-10-28 12:05:05 769

转载 计算机网络中数据链路层的介绍

一、概述1、在OSI七层模型中,数据链路层位于倒数第二层的位置;2、在TCP/IP四层模型中,数据链路层与物理层共同组成了网络接口层;二、数据链路层要解决的问题(1)封装成帧帧是数据链路层中数据的基本单位;发送端在网络层的一段数据前后添加特定标记形成“帧”;接收端根据前后特定标记识别出“帧”;封装成帧的过程:从网络层传送IP数据报给数据链路层;数据链路层接收到数据报之后,在前后添加标记;(2)透明传输“控制字符存在于帧数据中,但是要当做不存在去处理”;举例:当IP数据报的数

2020-09-12 10:25:03 858

空空如也

空空如也

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

TA关注的人

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