自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LiuWang的博客

一个技术小白的研发之路

原创 深入了解 synchronized 底层原理

前言如果一个资源被多个线程共享,为了避免因为资源抢占而导致资源数据错乱,我们需要对线程进行同步,那么 synchronized 就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分,今天就来了解一下 synchronized 的使用和底层原理。一、synchronized 的特性1.1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断...

2020-02-07 23:24:32 216 2

原创 Spring知识点小结

目录一、Spring简介二、Spring框架的优点有哪些?三、IoC容器的特点四、什么是 DI ?五、Spring框架中的 BeanFactory 接口和 ApplicationContext 接口有什么区别?六、Spring中Bean的实例化的三种方式七、对 Spring 容器中 Bean 标签的理解八、Spring 框架中属性注入有哪几种注入方式?九、bea...

2019-10-23 23:34:40 211 1

原创 浅谈Java多态

Java多态的实现机制是父类过接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期间才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这...

2019-09-25 13:16:21 110

原创 浅谈Java的类加载过程

目录前言类加载加载验证准备解析初始化总结前言一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译 运行编译,即把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件。运行,则是把编译生成的.class文件交给Java虚拟机(JVM)执行。而我们所说的类加载过程即是指JVM虚拟机把.class文件...

2019-09-11 11:34:33 183 1

原创 一次完整的HTTP请求处理过程

在面试中,我们往往会被面试官问到:你能介绍一下一次HTTP请求的处理流程吗?以www.baidu.com为例。如果仅仅是以下回答,面试官往往不会很满意。域名解析:通过域名获取该 URL 的 IP 地址; 建立连接:通过TCP三次握手,建立起客户端(浏览器)与服务器的连接; 发起HTTP请求:建立连接后,客户端向服务端发起请求; 响应请求:服务器收到请求后,就开始处理请求,处理之后会给...

2019-08-10 21:56:55 165

原创 Spring中@Controller、@RestController、@ResponseBody的关系

这是一段简单的helloworld程序,正常跑起来在页面上显示一个“HelloWorld”,可是这些注解是什么意思呢?import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.spr...

2019-04-30 17:11:07 236

原创 计算机网络常见面试题总结

目录1. OSI、TCP/IP、五层协议的体系结构?2. IP地址的分类3. TCP与UDP的区别?4. TCP如何实现数据的可靠性?5. TCP协议如何提高传输效率?6. 三次握手和四次挥手全过程6.1 三次握手6.2 四次挥手7. TCP协议段格式与UDP协议段格式8. 在浏览器中输入一个www.baidu.com后执行的全部过程?8.1 域名解析...

2019-02-27 21:00:13 651 1

原创 操作系统原理常见面试题总结

目录1. 进程与线程的区别?2. 进程的状态及其转换3. 进程的同步与互斥4. 进程间的通信方式有哪些?5. 作业(进程)的调度算法有哪些?6. 死锁产生的原因,死锁产生的必要条件是什么,如何预防死锁,如何避免死锁?1. 进程与线程的区别?根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。 开销方面:每个进程都有独立的代码和数据空间(程...

2019-02-21 23:06:21 1300

原创 Java并发编程的一些面试题整理

目录1. 在Java中守护线程与本地线程的区别?2. 线程与进程的区别?3. 什么是多线程中的上下文切换?4. 死锁与活锁的区别?死锁与饥饿的区别?5. Java中用到的线程调度算法是什么?6. 为什么使用Executor框架?7. 什么是阻塞对列?阻塞对列的实现原理是什么?如何使用阻塞对列来实现生产者-消费者模型?8. 多线程的同步与互斥有几种实现方法,都是什么?...

2019-01-24 20:33:31 287

原创 Java中抽象类与接口的区别

一、抽象类在了解抽象类之前,先需要了解一下抽象方法。抽象方法是一种特殊的方法:它只有方法的声明而没有具体实现。抽象方法的声明格式如下:abstract void fun();抽象方法必须使用abstract关键字进行修饰,如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类名前使用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象类的定...

2019-01-23 20:48:44 101

原创 Java中static关键字的作用与用法

一、static关键字的特点:static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。1. static修饰成员方法       static修饰的方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静...

2019-01-21 17:37:39 15893

原创 Mybatis 的配置

1. XML 配置1.1 XML 结果Mybatis 的配置文件包含了会影响 Mybatis 行为的设置(settings)和属性(properties)信息。其中配置文件的顶层结构如下:configuration 配置 properties 属性 settings 设置 typeAliases 类型别名 typeHandlers 类型处理器 objectFactor...

2019-01-15 14:36:11 209

原创 五种IO模型(通过例子说明)

通俗地讲,在网络环境下IO可分为两个部分:等待和数据迁移。如果要提高IO效率,则需要减少等待时间。五种IO模型分别为:阻塞式IO、非阻塞式IO、信号驱动IO、多路复用IO及异步IO。前四个为同步IO。所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回。就得到了返回值;换句话说,就是由调用者主动等待这个调用的结果。 异步则相反,调用发出之后,这个调用就...

2018-10-21 20:50:34 808

原创 Mybatis 简介与入门

目录1. Mybatis是什么?1.1 Mybatis的发展1.2 Mybatis vs JDBC SQL2. 开始使用Mybatis2.1 构建 SqlSessionFactory2.1.1 XML 构建 2.1.2 编码构建2.2 使用 SqlSession3. Mybatis的核心概念3.1 核心类型3.1.1 SqlSessionFactoryB...

2018-09-04 19:29:09 151

原创 Java的JDBC编程

目录1. 什么是JDBC2. JDBC工作原理3. JDBC使用步骤3.1 JDBC工作流程3.2 基于MySQL的JDBC开发案例4. JDBC常用的接口和类4.1 JDBC API4.2 数据库连接4.3 Statement 对象4.4  ResultSet 对象1. 什么是JDBC现在的应用系统大多数都离不开数据库,Java 程序访问数据库的基...

2018-09-04 10:23:13 136

原创 零基础学习MySQL数据库—6

目录一、视图基本使用: 二、MySQL用户管理创建用户:删除用户:修改用户密码:MySQL数据库的权限给用户授权回收权限一、视图视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。基本使用:创建视图create view 视图名 as select...

2018-08-23 13:52:47 243 1

原创 零基础学习MySQL数据库—5

目录一、表的内连与外连1.1 内连接1.2 外连接左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接。 右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接。 二、索引索引的基本原理创建索引创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引创建索引的原则 三、事务事务的隔离级别如何设置事务...

2018-08-19 20:26:17 332

原创 零基础学习MySQL数据库—4

目录多表查询为什么要使用多表查询?自连接子查询 单行子查询多行子查询 多列子查询在from子句中使用子查询 自我复制(蠕虫复制)删除表中重复的数据合并查询外键综合案例多表查询前几篇博客中写的 mysql 表的查询都是对一张表进行查询,在实际开发中这是远远不够的。 下面我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRA...

2018-08-11 21:30:40 245

原创 零基础学习MySQL数据库—3

一、select 查询1.1 select 的简单使用语法:select [distinct] *| {column1,column2,...} from tbl_name;创建一张学生表来测试:create table student (id int not null default 1,name varchar(20) not null default '',ch...

2018-08-10 19:15:19 272

原创 Java 中几种常用设计模式

Java 中一般认为有23种设计模式,当然暂时不需要所有的都会,但是其中常见的几种设计模式应该去掌握。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式...

2018-08-09 16:50:32 50297 7

原创 零基础学习MySQL数据库—2

一、表的约束真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 表的约束很多,这里主要介绍如下几个,其余的以后讲解。null/not null,default, comment, zerofill,primary key,auto_increment,unique。1...

2018-08-06 10:52:06 284

原创 零基础学习MySQL数据库—1

一、数据类型1. 数值类型 越界测试:mysql> create table tt1(num tinyint);Query OK, 0 rows affected (0.11 sec)mysql> insert into tt1 values(1);Query OK, 1 row affected (0.02 sec)mysql> insert in...

2018-08-04 22:28:17 918

原创 零基础学习MySQL数据库—0

一、数据库的安装网上安装教程有很多,这里找了比较靠谱的安装教程,分别是在Windows下安装和配置和在Linux下安装与配置。 这篇文章主要介绍的是在 Windows 下使用 MySql 数据库。二、MySql 数据库基础1、什么是数据库?存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于查询和对数据的管理 ...

2018-07-29 18:01:23 3952

原创 深入理解JVM的垃圾回收器和内存分配策略

一、垃圾收集器上一篇博客主要讲了收集算法,如果说收集算法是内存回收的方法论,那么垃圾回收器就是内存回收的具体实现。以下讲的收集器基于JDK 1.7的G1收集器之后的HotSpot虚拟机,这个JVM包含的所有收集器如下图所示: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明他们可以搭配使用。所处的区域表示它是属于新生代收集器还是老年代收集器。再将具体的收集器之前我...

2018-06-28 16:16:30 292

原创 深入理解JVM的垃圾回收机制

上一篇博客介绍了Java运行时内存的各个区域。对于程序计数器、虚拟机栈、本地方法栈这三个部分而言,其生命周期与相关线程有关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。因此本篇文章所讲的有关内存分配和回收关注的是Java堆与方法区这两个区域。1、如何判断对象已“死”Java堆中存放着几乎所有的对象实例,垃圾回收器...

2018-06-26 16:55:24 27296 9

原创 JVM简介及Java内存区域与内存溢出异常

一、JVM简介1.1 JVM概念(1) 虚拟机简介:指通过软件模拟的具有完整硬件功能的、运行在一个安全隔离的环境中的完整计算机系统。常见的虚拟机有JVM、VMwave、Virtual Box (2) JVM和其他两个虚拟机的区别:VMwave与Virtual Box是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器。而JVM则是通过软件模拟Java字节码的指令集,JVM中只是主...

2018-06-24 18:09:13 546 1

原创 JavaSE集合类之Map集合

Collection集合的特点是每次进行单个对象的保存,如果现在要进行一对对象(偶对象)的保存就只能使用Map集合来完成,即Map集合中会一次性保存两个对象,且这两个对象的关系:key=value结构。这种结构最大的特点是可以通过key找到对应的value内容。1、Map接口描述首先来观察一下Map接口的定义:public interface Map<K,V>在Map...

2018-06-14 20:27:32 222

原创 Java集合类之集合输出

在之前进行集合输出的时候都利用了toString(),或者利用了List接口中的get()方法。这些都不是集合的标准输出。如果从标准上来讲,集合输出一共有四种手段:Iterator、ListIterator、Enumeration、foreach。1. 迭代输出:Iterator 在JDK1.5之前,在Collection接口中就定义有iterator()方法,通过此方法可以取得Iterat...

2018-06-01 11:22:54 2385

原创 Java集合类之Collection集合接口

1 Java类集简介1.1、Java类集的引出 类集实际上就属于动态对象数组,在实际开发之中,数组的使用出现的几率并不高,因为数组本身有一个最大的缺陷:数组长度是固定的。由于此问题的存在,从JDK1.2开始,Java为了解决这种数组长度问题,提供了动态的对象数组实现框架–Java类集框架。Java集合类框架实际上就是java针对于数据结构的一种实现。而在数据结构之中,最为基础的就是链表。...

2018-05-26 10:50:11 509

原创 Java—ClassLoader类加载器

Class类描述的是整个类的信息,在Class类中提供的forName()方法,这个方法根据ClassPath配置的 路径进行类的加载,如果说现在你的类的加载路径可能是网络、文件,这个时候就必须实现类加载器, 也就是ClassLoader类的主要作用。 1 认识ClassLoader 首先通过Class类观察如下方法:public ClassLoader ...

2018-05-15 21:06:48 98

原创 Java单级VO操作

题目:要求使用字符串: “emp.name:Peter|emp.job:Student” 创建实例化对象, 使用单级VO操作 Emp.javapackage Java.vo;public class Emp { private String name; private String job; public String getName() { re...

2018-05-14 18:07:30 1050

原创 Java—反射

1、认识反射机制1.1 初识反射 反射指的是对象的反向处理操作,我们先来观察一下“正”的操作。在默认情况下,必须要先倒入一个包,而后才能产生类的实例化对象,如下:import java.util.Date;public class Test { public static void main(String[] args) { Date date = new...

2018-05-12 14:04:10 113

原创 Java多线程—生产者与消费者模型

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。 这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦,如工厂模...

2018-05-06 11:34:13 123

原创 Java 多线程同步的两大方式

1. 同步问题的引出 先看一段代码,模拟多个线程卖票:class MyThread implements Runnable { private int ticket = 10 ; // 一共十张票 @Override public void run() { while(this.ticket>0) { // 还有票 try {

2018-05-05 12:50:14 124

原创 Java—猴子扔桃

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?public class Test { public static void main(String[] a...

2018-05-05 09:40:19 750

原创 排序算法总结

1. 冒泡排序 冒泡排序(Bubble Sort),是一种 计算机科学领域的较简单的 排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。时间复杂度:T(n) = O(n²) 空间复杂度:S(n) = O(1) 是一种稳定性排序实现代码如下:#includ...

2018-05-01 14:48:47 92

原创 布隆过滤器

BloomFilter.h#pragma once #include<stddef.h> #include"bitmap.h" #define HashFuncMaxSize 2 #define BitMapCapacity 1024 // 字符串哈希函数 typedef size_t(*HashFunc)(const char*); type...

2018-05-01 11:33:51 63

原创 位图

bitmap.h#pragma once#include <stdint.h>#include <stddef.h>typedef struct BitMap { uint64_t* data; size_t capacity; //当前位图表示最大的位}BitMap;void BitMapInit(BitMap* bm, size_t capac...

2018-05-01 11:30:45 177

原创 哈希表(开散列)

hash_table2.h#pragma once#include<stddef.h>#define HashMaxSize 1000typedef int KeyType;typedef int ValType;typedef size_t (*HashFunc)(KeyType key);typedef struct HashElem { KeyTyp...

2018-05-01 11:26:34 74

原创 Java—多线程

1.1、进程与线程概念Java的第一大特色:多线程的编程支持!!! 讲到多线程时,不得不提及的就是进程,那么什么是进程,什么又是线程? 进程:操作系统中一个程序的执行周期称为一个进程。 在DOS系统的时代,由于其本身就是一个单进程的操作系统,所以在同一时间段上只能够有一个程序执行。 后来发展到winodws系统后,我们发现多个程序可以同时执行,所以windows是一个多进程的操作系统。...

2018-04-27 15:42:09 95

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