自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 .class文件和类加载器的那些事

1、如果将.txt的文件改为了.class文件,JVM会加载吗?不会,如果不是.class的文件格式,JVM根本不会加载这个类。JVM会检查文件内容(魔数),如果不符合java规范的内容,并不会被加载。在大多数情况下,我们都是通过扩展名来识别一个文件类型的,比如我们看到一个.txt类型的文件,我们就知道他是一个纯文本文件。但是,扩展名是可以修改的,那一旦一个文件的扩展名被修改过,那么怎么识别一个文件的类型呢?这就用到了我们提到的魔数了。很多类型的文件,其起始的几个字节的内容是固定的(或有意填充,或本就

2021-02-08 22:11:08 276 8

原创 windows下查杀进程

端口被占用,需要杀死进程,先查找进程,再结束进程。方式一:根据进程父ID杀死进程查找被占用的端口netstat -ano | findstr "1080"根据进程ID杀死进程taskkill /pid 5588 /f方式二:根据程序名称结束进程在任务管理器找到要结束的进程根据程序名结束进程taskkill /im nginx.exe /f/f 强制结束进程...

2020-08-31 11:05:43 523 4

原创 mysql中表常用的操作

desc / explain:慢性分析工具,查询优化的时候就是desc根据分析,看索引信息和查询条件的约束。delete会清除表中记录并且不能恢复,drop可以恢复。增:注意:插入属性值个数一定要和所写属性名的个数相匹配。向表中插入一条内容(根据所写属性插入属性对应的值):insert into 表名 values (属性值,属性值,属性值) ;insert into 表名(属性名,属性名) values (属性值,属性值) ;向表中批量插入n条内容:insert int.

2020-07-27 19:21:17 198

原创 GC(垃圾回收)详解

基础:1、引用计数法:无法解决循环引用的问题,不被java采纳2、根搜索算法:从根结点扫描,只要这个对象在引用链中,那就是可触及的。3、GC分为年轻代GC和老年代GC4、新生代、老年代、元数据区现代虚拟机中的垃圾搜索算法:标记清除复制算法(新生代)标记压缩(老年代)这三种算法都扩充了根搜索算法。1、标记清除算法**概念:**标记清除算法是现代垃圾回收算法的思想基础。标记清除将垃圾回收分为两个阶段:标记阶段和清除阶段。标记阶段:首先通过根结点,标记所有从根节点开始的可达对.

2020-07-22 21:58:00 12910 4

原创 反射与类加载器

反射:所谓的反射就是指,在java程序运行时,获得某些对象的实际结构与类型的过程。创建对象的方式:用new调用构造方法创建对象用newInstance()按照类型创建对象用Class.formName()根据类名创建对象(类型必须在jar包中,不然创建不了)类加载器:ClassLoader:在JVM启动的过程中,把类模板加载到内存中的工具。就是将一个存在与系统文件中的.class文件,加载到当前JVM的内存中,变成java能识别的Class类型。启动项加载器:由C语言完成的,当JV

2020-07-14 22:27:13 326

原创 NIO的过程

同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。NIO:NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从

2020-07-14 22:24:33 228

原创 工厂模式

工厂通俗来说就是来创建对象用的,在工厂类中定义一个创建对象的接口,通过传进来的不同参数来创建不同的实现类对象,其实定义一个创建对象的接口就规定了这个工厂只能创建这种类型的对象,就像钢铁厂只能创建钢铁以及其附属产品一样,而塑料厂只能创建塑料和塑料玩具一类的。工厂类型接口:用usb接口来举例,由于鼠标和键盘都是实现了usb接口,所以用这个来举例。public interface IUSB { public void writeData();}实现类:1、键盘类public cl.

2020-07-13 21:14:04 105

原创 单例模式

全局只存在唯一一个对象,该类负责创建自己的对象,同时确保只有一个对象被创建,分别为懒汉式、饿汉式、双重检查锁模式。1、单例类只能有一个实例(构造方法私有)2、单例类必须自己创建自己的唯一实例(类中有方法来创建对象)3、单例类必须给所有其他对象提供这一实例(必须提供访问单例对象的方法)饿汉式(线程安全):这种方式在类加载时就完成了初始化,导致类加载的速度变慢,这种方式天生就是线程安全的。public class Demo1 { private static Demo1 demo1.

2020-07-13 20:27:26 121

原创 TCP三次握手和四次挥手

三次握手:首先,服务器打开一个端口,变成监听状态。客户端发送一个请求SYN = x,客户端此时状态为SYN-sent状态。当服务器的监听端口收到客户端发过来的SYN请求后,向客户端回一个SYN = y,ACK = x + 1,这个ACK表明服务器已经收到了客户端发过来的请求,这个SYN是为了确认客户端是否真的要和自己建立连接,发送完成之后,服务器的状态变为SYN-RCVD(SYN收到状态)。当客户端受到服务器发送来的请求之后,端口变成建立连接状态,然后给服务器回一个ACK = y + 1,表明.

2020-07-09 20:05:51 173

原创 多线程并发——闭锁,珊栏,信号量

闭锁(CountDownLatch):多线程并发的时候,设置计数器,当计数器的值没有减到0的时候,调用await()方法的线程会阻塞。countDownLatch():用来计数,每执行一次,计数器的值减去1await():用来阻塞当前线程,当计数器中的值没有减为0的时候,await()方法让当前线程阻塞设置计数器线程:import java.util.concurrent.CountDownLatch;//设置计数器线程public class Thread1 implement.

2020-07-09 16:35:32 252

原创 偏向锁、轻量级锁、自旋锁、重量级锁的区别与膨胀

偏向锁:当一个线程访问对象时,它会偏向这个线程,此时对象持有偏向锁。偏向此时访问它的第一个线程,这个线程将对象头中的ThreadID改为自己的ID,之后再次访问这个对象的时候,只需要对比ID,不需要再使用CAS再进行操作。轻量锁:当一个对象此时为偏向锁的时候,另一个线程访问这个对象,因为偏向锁不会主动释放,所以第二个线程可以看到对象此时的偏向锁状态。这时对象已经存在竞争了,此时检查原来持有该对象锁的线程是否依然存活,如果挂了,则可以将对象变为无锁状态,然后重新偏向新的线程,如果原来的线程依然存活,而且还.

2020-07-08 15:26:47 944 2

原创 java类加载过程和内存模型

JVM(虚拟机):通俗来说,JVM其实就是一个软件,也叫做虚拟机,每一个JVM实例对应一个JAVA进程,当我们执行java **.class其实就是启动了一个JAVA进程,此时一个JVM实例诞生,当该进程关闭时,JVM实例随之消亡。如果一个计算机运行多个java进程,每个java进程都有它自己的jvm实例。jvm执行引擎实例则是对应所属java进程的线程Class文件:字节码文件,是由.java编译而来的二进制文件,class文件是一组以8位字节为基础单位的二进制流。其实这

2020-07-05 18:36:20 181

原创 Spring AOP五种增强

概念:AOP,面向切面编程,就是当你已经完成,或者更加注意一些核心功能的时候。需要使用的编程过程,这个使用,你会发现,一个核心的业务,是由一个核心功能,和若干个额外服务类型的功能,统一组成的,比如数据验证,再比如日志的记录。其实在场景中,我们的核心功能是针对数据库的操作,可能是增删过程。而服务类功能,比如记录日志,或者输入内容的验证过程。其实不是非有不可。没有这个功能,核心功能也能正常执行。这个时候,我们就要考虑一个问题,这些必要或者非必要的额外功能,是不是要写在你的核心代码过程当中啊?我们现在,将

2020-07-01 21:38:22 1103

原创 数据库事务的并发和隔离级别

事务执行某一任务之前,先要给当前状态一个快照(保存了数据库的当前所有状态),然后再具体执行某一系列操作。事务的基本要素:1、原子性:事务开始执行的过程中,所有的操作要么全部做完,要么全部都不做,事务执行的过程中出错,就会回滚到事务开始前的状态,事务就是一个不可分割的整体。2、一致性:当多个事务共同操作数据库的时候,各个事务读取的数据应该都是一致的。3、隔离性:多个事务并发时,彼此之间的相互影响的程度。4、持久性:当事务完成提交之后,事务对数据库的所有更新将被保存到数据库中。事务的并发问题

2020-06-30 14:20:05 311

原创 java多线程并发和锁机制

线程和进程:什么是线程,什么是进程?作业(JOB)计算机的一次执行任务,对于单核CPU来说,作业就是线程为了完成某一个任务所占用一段时间的震荡时钟。线程(Thread)是计算机执行计划任务的最小单元(携带了很多的作业(JOB)),线程中的作业基本上都是同步的,如果是异步,那么就会大大降低应用程序的效率。进程(Process)很多线程的集合,进程在操作系统级别是管理线程的工具,也就是说,一个进程里面有很多个线程。线程的名字,我们可以自己给出,但是进程必须是由操作系统,给出一个独有的进程号,这个有.

2020-06-26 12:11:54 767

原创 mybatis中参数和返回值的深入理解

parameterType(参数类型)当参数类型是对象数据类型时,在parameterType上写上参数名,根据参数获取他们的get()方法,然后用#{} 传入属性名,mybatis就会自动映射到数据库的字段中去。这里要提到一点:OGNL表达式(Object Graphic Navigation Language)它是通过对象的取值方法来获取数据,在写法上把get给省略了。比如:我们获取用户的名称---------------------------------- ​ 类中的写.

2020-06-25 16:39:05 777

原创 SpringMVC

之前我们学过的servlet的确可以做Web开发,但是当一个项目功能很多的时候,在Servlet体系下要创建很多的Controller,每个Controller都是一个功能,我们知道这是很浪费资源的。所以SpringMvc就给我们解决了这种问题,他会利用Spring容器的特性,更为简洁的为我们完成Servlet的功能,接下来我们下SpringMVC的配置和核心组建。核心组件:DispatcherServletDispatcherServlet:Spring-Mvc给我们的Servlet,这个Se.

2020-06-19 20:13:16 160

原创 Spring基于注解的配置

Spring基于注解的配置bean的xml配置:运用Spring注解开发时,一定要先配置xml,这里bean中的context是为了扫描com.itheima下的所有类,以及子包中的所有类,并查看类上有没有注解(类似于路标一样),根据注解创建对象。<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

2020-06-12 16:09:54 153

原创 Java中操作容器的实现类

集合容器常用实现类(方法)Collections:Arrays:Comperable(比较器):intergor(迭代器):Collections:1、排序方法(默认字典式升序排列)Collections.sort();调用时里面的元素要实现Comparable接口2、容器中对象顺序反转方法Collections.reverse();Arrays:1、排序方法Arrays.sort;2、截取数组Arrays.copyOf()Arrays.copyOfRange()注意:

2020-06-11 16:33:23 222

原创 代理模式

今天来给大家介绍一种常见的设计模式(代理模式),其实之前我看过一遍,但是当时也就仅仅停留在认知的层次,但是当我做完AOP之后,我去,这东西太香了。今天就给大家浅显易懂的介绍以下代理模式。定义代理模式:为其他对象提供一种代理以控制对这个对象的访问。其实我知道大家看到这里一定很懵逼,接下来我们引入一些场景来让大家理解一下。场景引入有一天在公司,小史完成了一个特别核心的功能,但时此时,公司有个大老板和二老板,大老板今天心情不太好,“小史这么早就下班了,功能完成的咋样了?”,“早都弄好了,看我厉害吧,

2020-06-10 23:12:51 154

原创 IOC&DI常用标签总结

IOC&DI常用标签总结:spring依赖注入的时候创建的list是ArrayList,创建的map是LinkedHashMapIOC: <bean id="" class="" scope="" lazy-init="" init-method="" name="" factory-bean=""

2020-06-08 19:40:26 188

原创 Map常用方法

1、增put(key, value); 存放的是key-value对public static void main(String[] args) { Map<String, Student> map = new HashMap<>(); map.put("xiaobai", new Student("xiaobai", 10)); map.put("xiaohei", new Student("xiaobai", 10));

2020-06-06 11:52:49 4413

原创 Set集合常用方法

set集合接口也属于Collection的常用接口,其最大特点是不允许出现重复数据。TreeSet中是有序的容器,所以如果将散乱的set集合中的元素放入到TreeSet中,那么会自动排好序。(前提是放入的元素的类实现了Comparable接口)1、增add();addAll(Collection);public static void main(String[] args) { List<String> list = new LinkedList<>.

2020-06-06 10:13:42 2082

原创 List集合常用方法

这里总结了一下List集合常用的一些方法,但是最重要的大家一定要注意最后数组那块的坑。1、增add();add(int index, T t);addAll(Collection);addAll(int index, Collection);public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("hello");

2020-06-05 18:02:13 2503

原创 HashMap源码解析

HashMap初始化设置:1、初始化默认容量:16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;2、最大容量:2的30次方,和ArrayList相比ArrayList存放的元素个数多。static final int MAXIMUM_CAPACITY = 1 << 30;3、默认加载因子,如果构造方法没有传参的话,默认加载因子就是0.75。static final float DEFAULT_LOAD_FAC

2020-06-05 12:45:40 101

原创 LinkedList源码解析

LinkedList初始化设置:1、初始头节点transient Node<E> first;2、初始尾节点transient Node<E> last;可以看到,初始时头节点和尾节点都是null。构造方法:1、无参构造方法 public LinkedList() { }2、参数为Collection对象的构造方法public LinkedList(Collection<? extends E> c) { this()

2020-06-04 19:44:19 87

原创 ArrayList源码解析

ArrayList初始化设置:1、初始化默认容量:10private static final int DEFAULT_CAPACITY = 10;2、当往里放置一个Collection集合的时候,此时用这个初始化数组EMPTY_ELEMENTDATAprivate static final Object[] EMPTY_ELEMENTDATA = {};...

2020-06-04 19:35:30 231

原创 Spring的IOC和DI

Spring中的IOCIOC的作用:降低程序间的依赖关系依赖关系的管理:以后都交给spring来维护在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明把对象的创建交给spring来管理,对象创建完成后放入到SpringIOC容器中。Bean:是一种JAVA语言写成的可重用组件。写成Bean,类必须是具体的和公共的,并且具有无参数的构造器,即java类,通常把需要进行控制反转的类叫做Bean。ApplicationContext的三个常用实现类ClassPa

2020-06-03 21:32:27 122

原创 手写Spring中的IOC过程

今天我们来手写一下Spring中的IOC过程。程序的耦合和解耦合1、程序的耦合:程序间的依赖关系2、分类:类之间的依赖方法间的依赖3、解耦合:降低程序间的依赖关系实际开发中应该做到:编译期不依赖,运行时才依赖。这里给大家举个例子,我们之前学习的JDBC的过程。OK,看图。过程1:如果用过程1这种方式创建驱动,那么必须拥有com.mysql.cj.jdbc这个实体类,如果你不写,那编译你都通过不了,编译器会直接告诉你错误。这个就是在编译期依赖。过程2:用过程2这种方式,你只需要给类

2020-06-02 21:44:27 173

原创 servlet学习_days_05

拦截器拦截器一般是用来决定servlet要不要执行,怎末执行拦截器是拦截请求并且在servlet之前执行动作逻辑的一种组件其实拦截器就是看你有没有能力执行下一个逻辑单元。Filter在服务器一启动的时候就直接加载。拦截器的常用方法:1、初始化方法 public void init(FilterConfig filterConfig) throws ServletException { filterConfig.getInitParameter(String s); //获

2020-05-29 21:04:15 114

原创 servlet学习_days_04

今天来说一下Cookie和Session,以及他们工作方式和原理…,但是说这两之前,我还想提一个新的东西-------form表单。form表单form同步提交的方式:提交数据之后一定会跳转页面。以后我们再说一些异步提交的方式。<!--action配置走哪个servlet接口,method配置走的请求方式--> <form action="login" method="post"> <!--from表单,其代表的是将from中包含n

2020-05-28 22:54:20 173

原创 servlet学习_days_03

servlet生命周期servlet加载----->创建----->执行----->销毁①servlet():当Web-Client访问时,创建servlet对象。②init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。③service()

2020-05-27 16:46:16 110

原创 servlet学习_days_02

今天利用servlet实现注册的功能。这里我们用GET请求来向浏览器发送数据。OK,我们看具体实现吧。分层模型controller:1、TestService.java:接受数据2、Service.java:创建实体类对象,并传入dao层中model:3、user.java:用户实体类4、BaseDao.java:连接数据库配置5、UserDao.java:查询数据库并返回一个结果init:6、Config.java:根据web.xml文件中的信息,配置数据库连接所需要的内容。

2020-05-27 15:59:18 138

原创 数据结构——栈

栈的实现:栈是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)不含任何数据元素的栈称为空栈。栈又称为空栈栈又称为后进先出的线性表,简称LIFO结构栈本身是一个线性表,其数据元素具有线性关系,只不过它是一种特殊的线性表而已。栈的插入操作,叫做进栈,也称压栈、入栈栈的删除操作,叫做出战,也称弹栈定义一个栈的接口,然后我们来实现它。public interface Stack<E> extends Iterabl

2020-05-26 16:02:27 188

原创 servlet学习_days_01

Servlet ------->轻量级服务①Servlet(Server Applet),是用 Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。②每一个servlet都只处理客户发来的某一种请求。③所有的let,lite都叫他轻量级内容MVC分层框架M:模型层,主要是处理

2020-05-26 15:52:38 165

原创 Tomcat的下载和配置

Tomcat的下载(1)Tomcat官网:https://tomcat.apache.org/download-80.cgi(2)点击左侧Download下的对应版本。注意有zip和exe两种格式的,zip是免安装版的,exe是安装版。同时观察自己的电脑是64位系统还是32位系统。这里我下载的是64位zip版本的,下载解压之后就是这个样子。Tomcat的配置启动打开bin目录:这里的statup.bat可以启动你的Tomcat。Tomcat服务器的闪退问题:启动闪退问题一般是因为JD

2020-05-25 22:24:29 309

原创 JavaEE概述和入门

javaEE开发:为什么学JavaEE在我们学习Java语言时,你肯定是想知道Java到底能干些什么,现在到了JavaEE这个阶段,就可以告诉你了。Java EE:Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE(这个名称应该还没有得到群众认可)。狭义的 Java EE 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S

2020-05-25 20:37:43 607

原创 算法——递归与回溯法

递归:①执行一个方法时,就创建一个新的受保护的独立空间(栈空间)②方法的局部变量时独立的,不会相互影响,比如变量n③如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据。④递归必须向退出递归的条件逼近,否则就是无限递归,就会栈溢出。⑤当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。递归注...

2020-05-01 18:19:43 482 1

原创 Mybatis的配置应用及分析

1、mybatis框架概述1.1、什么是框架:框架是软件开发中的一套解决方案,不同的框架解决的是不同的问题。​使用框架的好处:框架封装了很多的细节,使开发者可以使用极简的方式实现功能。1.2、三层架构:表现层:是用于展示数据的​业务层:是处理业务需求的持久层:是和数据库交互的1.3、mybatis的概述:mybatis是一个持久层框架,用Java编写的。它封装了jdbc操作的很...

2020-04-30 21:52:53 157

原创 Web开发基础部分

HTTP的概念和作用:HTTP:超文本传输协议HTTP的功能:规范了浏览器和服务器传输数据的格式,没有他也可以,但是会阻碍互联网的发展(对于不同的浏览器,服务器都要开发出不同的代码)HTTP的特点:简单快捷,无连接,无状态,1.1版本支持可持续连接HTTP说白了就是文本流是:<K, V>头名:头内容每一个KV对都叫做一个头信息例如:GET / HTTP/1.1 Hos...

2020-04-23 18:15:42 294

空空如也

空空如也

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

TA关注的人

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