- 博客(87)
- 收藏
- 关注
原创 SpringMVC初步学习
一、什么是SpringMVCMVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责。1模型:用于存储数据以及处理用户请求的业务逻辑。2.视图:向控制器提交数据,显示模型中的数据。3.控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。SpringMVC的工作流程从上图 可总结出 S...
2020-05-05 22:38:48 402
原创 SpringBoot学习入门
一、什么是SpringBootSpringBoot使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行 jar,内嵌 Servlet 容器)、准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需要很少的 Spring 配置。简...
2020-04-28 17:57:30 275
原创 线程池的种类和应用
一、线程池作用线程池作用就是限制系统中执行线程的数量。根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程 排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程 池中有等待的工作线程,就可以开始运行了;否则进入等...
2020-04-14 19:43:59 303
原创 Hashtable和ConcurrentHashMap是如何保证线程安全的
HashMap在多线程环境下存在线程安全问题,所以会采取以下方式来代替HashMap1. 使用Collections.synchronizedMap(Map)创建线程安全的map集合;2.Hashtable3.ConcurrentHashMap一、Collections.synchronizedMap(Map)是如何实现线程安全的先来看一下synchronizedMap(Map)的源码...
2020-04-12 20:50:30 1507
原创 JVM的垃圾收集器
HotSpot虚拟机提供了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使 用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。CMS和G1这两款收集器相对比较复杂,也是重点讨论的收集器。1. Serial收集器(新生代收集器,串行GC)特性:单线程串行:指垃圾回收线程与用户线程是串行的,会造成用户线程暂停,也就是Stop TheWorld...
2020-04-12 14:12:52 128
原创 对象锁和类锁的区别
一、对象锁对象锁,顾名思义是锁住对象,不同实例的锁互不影响。对象锁有两种加锁的方式,主要却在于Synchronized作用的地方的不同1.作用在实例方法上public synchronized void method(){}2.作用在代码块上public void method(){ synchronized(this){ //这里是需要同步的部分 }}持有相同对...
2020-04-11 23:16:16 7817
原创 ThreadLocal的底层原理及使用方式
ThreadLocal可以理解为主要解决多线程并发的问题,实际上,在使用场合上也多是在处理多线程并发的时候会用到ThreadLocal这个类。然而ThreadL并不是一个Thread,而是代表了线程变量的副本。ThreadLocal只对外开放了四个方法,分别是构造器ThreadLocal()、set()、get()、和remove(),当然,还有一个initialValue()方法是protect...
2020-04-11 14:17:32 257
原创 JDK1.8中的hashmap和JDK1.7的区别
一、JDK1.7和JDK1.8之间的不同点1.数据插入的方式不同JDK1.7用的是头插法,而JDK1.8用的是尾插法,这是由于JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。2.组成结构不同JDK1.7的时候使用的是数组+ 单链表的数据结构。但是在JDK1.8及之...
2020-04-11 13:03:50 466
原创 多线程——Callable和Future的使用
通常我们创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。在JDK1.5之后,就有了Callable和Future,通过他们可以在任务结束之后得到任务执行结果。1.Callable介绍Calla...
2020-04-05 01:18:37 1008
原创 JVM的垃圾回收机制
一、什么是GCJava GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,在使用JAVA的时候,一般不需要专门编写内存回收和垃圾清理代码。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。由于电脑的内存大小的不变的,当我们使用对象的时候,如使用New关键字的时候,就会在内存中生产一个对象,但是我们在使用JAVA开发的时候,当一...
2020-04-04 23:38:48 164
原创 JVM的类加载机制
一、类加载的时机如果类没有进行过初始化,则需要先触发其初始化。虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):1.创建类的实例(new 的方式)。访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法2.反射的方式3.初始化某个类的子类,则其父类也会被初始化4.Java虚拟机启动时被标明为启动类的类,直接使用jav...
2020-04-03 19:30:35 148
原创 JVM内存模型
一、什么是JVMJVM(Java Virtual Machine)的简称。意为Java虚拟机。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机...
2020-04-03 14:18:35 128
原创 AOP——以及SpringAOP技术的两种表达方式
一.什么是AOPAOP(Aspect Oriented Programming),是面向切面编程的技术。AOP基于IOC基础,是对OOP的有益补充。AOP将应用系统拆分为个部分:核心业务逻辑及横向的通用逻辑,也就是所谓的切面。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率。AOP取代了传统的继承体系重复性代码,抽取采...
2020-04-01 17:42:45 175
原创 JDK动态代理
一、什么是 动态代理动态代理模式是对方法的横向增强,它不同于继承,继承通过对父类方法的覆盖,重新对方法进行定义,而横向增强是对方法执行前和执行后的一个增加,不重新定义方法。简单来说,就是可以在不修改源码的前提下,可以对某个方法增加功能。代理方式有两种:1.JDK动态代理:对接口或实现接口的类进行代理2.CGLib动态代理:对类进行代理本文主要介绍的是JDK动态代理二、JDK动态代理演示...
2020-04-01 13:15:17 106
原创 多线程——CyclicBarrier的使用
CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一 组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉Cycl...
2020-03-27 13:07:42 291
原创 多线程——Semaphore的使用
Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以 保证合理的使用公共资源。Semaphore可以用于做流量控制,特别是公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程 并发地读取,但是如果读到内存后,还需要存储到数据库中,而数据库的连接数只有10个,这 时我们必须控制只有10个线...
2020-03-26 23:16:27 236
原创 多线程——CountDownLatch的使用
CountDownLatch是一个同步工具类,它允许一个或者多个线程一直等待,直到其他线程执行完毕再执行。CountDownLatch的方法:CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个点完 成,这里就传入N。 CountDownLatch latch=new CountDownLatch(2);代码示例: for(int i=0;i&l...
2020-03-26 22:48:08 317
原创 数据库基础知识
一、什么是数据库数据库就是按照数据结构来组织,储存和管理数据的仓库,简而言之,数据库就是储存数据的仓库。为什么要用数据库1)、数据永久保存2)、使用SQL语句,查询效率高3)、管理数据方便二、数据库的数据类型1.整数类型TINYINT 1字节SMALLINT 2字节MEDIUMINT 3字节INT 4字节BI...
2020-03-26 17:00:03 217
原创 什么是CAS
一、什么是CASCAS: 全称Compare and swap,字面意思:”比较并交换“,是一种轻量级锁。线程在读取数据是不进行加锁,在准备修改数据时,先去查询原值,操作的时候比较原值是否被修改,若未被其他线程修改则写入数据,若已经被修改,就要重新执行读取流程。举个例子:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。 1. 比较 A 与 V 是否相等。(比较) 2. 如果比较相...
2020-03-26 00:07:11 5339
原创 初识Linux以及常用的指令
一、Linux是什么?Linux是一个操作系统,操作系统的作用是管理计算机硬件设备以及软件资源的,例如最常用的操作系统:最常用桌面操作系统:Windows最常用服务端操作系统:Linux最常用移动端操作系统:IOS、Android(本质上也是Linux)...
2020-03-24 14:07:04 107
原创 Spring基础——基于Annotation(注解)装配Bean
在 Spring 中,我们可以使用 XML 配置文件可以实现 Bean 的装配工作。如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSch...
2020-03-22 12:53:58 260
原创 Spring基础——Spring初识、SringIOC容器、Spring Bean
一、Spring是什么Spring是一个主流的JavaWEB的开发容器,是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架二、Spring的主要优点1)方便解耦,简化开发Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。2)方便集成各种优秀框架Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、H...
2020-03-18 03:02:23 205
原创 反射的概念及应用
一、什么是反射反射总是围绕Class对象进行的,先来了解一下对象的加载过程。1.一个.java的文件经过编译成功后,生成一个.class的文件2.当我们执行了初始化操作(有可能是new、有可能是子类初始化 父类也一同被初始化、也有可能是反射…等),会将.class文件通过类加载器装载到jvm中3.将.class文件加载器加载到jvm中,又分了好几个步骤,其中包括 加载、连接和初始化4.其...
2020-03-17 19:09:13 358
原创 注解
一、什么是注解注解就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。二、注解的作用1.编写文档:通过代码里标识的元数据生成doc文档2.代码分析:使用反射可以通过代码里的元数据进行分析3.编译检查:通过代码标识的元数据可以让编译器实现最基本的编译检查,ex:@Override三、最常见的注解1.@Override@Override的的作用会告诉编译器...
2020-03-12 01:12:40 2390
原创 枚举——enum
一、什么是枚举枚举是我们自己定义的一个集合,当我们要使用这个集合的时候,只能使用集合里的元素,不是这个集合里的元素我们就不可以使用。二、枚举可以干什么当我们需要用一个三,枚举的底层原理所有的enum默认继承自Enum,看一下Enum源码public abstract class Enum<E extends Enum<E>> implements...
2020-02-08 00:17:00 264
原创 面试题——字符串替换空格
题目;将字符串中的空格替换成“%20”例如:输入"we are happy",则输出"we%20are%20happy"思路:先将字符串转换成数组,遍历一遍数组,统计空格的个数,得到新数组的长度=旧数组的长度+2*空格。然后将旧数组从尾部开始元素拷贝到新数组中,空格则用三个长度的‘%’,‘2’,‘0’替换。代码实现:public static String replaceBlank(Stri...
2020-02-04 13:39:11 145
原创 自定义循环队列
我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。public class CircleQueue<E> { private E[] elements= (E[]) new Object[10]; private int size=0; private int front=0; pr...
2020-01-31 19:56:14 170
原创 自定义队列
public class MyQueue <T>{ private int size; private Node<T> head=null; private Node<T> tali=null; private static class Node<U>{ U value; Node&l...
2020-01-31 18:37:26 100
原创 泛型的定义及使用
一、泛型的概念泛型是程序语言设计的一种特性,jdk1.5定义了泛型,即参数化类型,就是把类型当做参数一样传递,类似于方法中的变量参数,然后在使用时传入具体的类型。二、泛型类的实现与使用public class<T>{}//自定义泛型类public interface<T>){}//自定义泛型接口public T method(T element){return e...
2020-01-25 15:10:23 6791
原创 自定义先进后出栈,实现存取值的功能
public class LinkedStack<T> { int size;//记录栈的有效长度 private static class Node<U>{ //储存值和指向下一个节点的指针 U value; Node<U> next; Node(){ this.next...
2020-01-23 22:51:58 191
原创 自定义HashMap,实现存取键值的功能
import java.util.*;public class MyMap<K,V> extends AbstractMap { private static final int SIZE=1024;//数组的容量 LinkedList<MyEntry<K,V>>[] buckets=new LinkedList[SIZE];//链表数组,...
2020-01-23 22:40:04 142
原创 多线程安全——Lock接口的使用以及与synchronized的异同
一、Lock接口简介public interface Lock锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而JDK1.5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synch...
2020-01-04 21:53:40 250
原创 网络原理——Cookie和Session
一、Cookie1.什么是CookieCookie是浏览器的数据片段,以key-value形式保存在客户端,当客户端用浏览器向服务器发送请求时,服务器会在响应中携带cookie,然后客户端将cookie存储在本地文件里,下次再次访问服务端是再发送给服务器端。网站经常使用cookie来识别用户是否登录。2.cookie的作用由于http一个无状态协议, 就是说这一次请求和上一次请求是没有任何...
2019-12-31 22:38:15 159
原创 网络原理——HTTP协议
一、http协议HTTP协议是超文本传输协议(Hyper Text Transfer Protocol)的缩写,是用于从万维网(www)服务器传输超文本到本地浏览器的传送协议,HTTP是基于TCP/IP通信协议来传输数据(HTML文件、图片文件、查询结果等),HTTP是一个属于应用层的协议。HTTP协议工作在服务器-客户端架构之上。浏览器作为HTTP客户端用过URL向HTTP服务器发送所有请求...
2019-12-22 22:30:23 347
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人