自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java核心知识三】抽象类和接口

接口和内部类为我们提供了一种将接口和实现分离的更加结构化的方法抽象类和抽象方法抽象方法:不完整,仅有申明而没有方法体。abstract void f();抽象类: 包含(一个或者多个)抽象方法的类。是普通类和接口的中庸之道。若继承抽象类并创建新类的对象,则 1)必须为基类中的所有抽象方法提供方法定义。2)或者导出类也是抽象类(编译器强制我们用abstra...

2018-08-25 23:04:25 203

原创 【Java核心知识二】面向对象的特性

面向对象的四大特性:抽象、封装、继承、多态。抽象封装继承多态关键字final和static抽象抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。  封装封装性就是尽量隐藏对象内部的细节,对外界只暴露出有限的接口和方法与之进行交互。封装的原则是使对...

2018-08-04 21:37:30 259

原创 【Java核心知识一】基础知识

相比C++,Java是一种更纯粹的面向对象语言,在Java中,(几乎)一切都是对象。 1.1 创建对象通过标识符操纵对象,操纵的标识符是对象的引用(reference)。类似于遥控器(引用)操作空调(对象)。创建引用:String s;对引用初始化:String s = "hello java";通常用new操作符实现初始化:Str...

2018-07-28 18:08:21 295

转载 IntelliJ Idea 常用快捷键

日常使用:Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+F12,可以显示当前文件的结构 Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可以选择 Ctrl

2017-09-28 13:53:08 263

原创 Java虚拟机小结

内存模型JVM内存结构程序计数器:程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。(线程私有)JVM栈:与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行

2017-09-26 11:14:04 328

原创 SpringMVC小结

SpringMVC流程Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传等功能。(1) Http请求:客户端请求提交到DispatcherServlet。(2) 寻找处理器:由DispatcherServlet控制器查询一

2017-09-08 14:19:35 393

原创 Redis实现分布式锁

前言:随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑日趋复杂,对系统的高并发访问、海量数据处理的场景也越来越多,传统的集中式系统已经逐渐无法满足要求,分布式系统被使用在更多的场景中。分布式系统有以下几个特点:可扩展性:可通过横向水平扩展提高系统的性能和吞吐量。高可靠性:高容错,即使系统中一台或几台故障,系统仍可提供服务。高并发性:各机器并行独立处理和计算。廉价高效:多台小型机而非单台

2017-09-07 16:58:10 569

原创 Spring和它的AOP

前言:首先,要了解 Spring 的 AOP 就必须先了解的动态代理的原理,因为 AOP 主要就是基于动态代理实现的。对动态代理有不明白的同学,可以看我的上一篇博客:代理设计模式(JDK和CGLIB)AOP的概念:AOP(Aspect Oriented Programming)是“面向切面编程”的简称,而面向切面编程其实就是一种关注点分离的技术。关注点分离是什么意思呢?比如,我们在软件开发中,主要的

2017-09-03 20:55:30 433

原创 代理设计模式(JDK与CGLIB)

静态代理动态代理1JDK动态代理2CGLIB动态代理代理模式的定义: 给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问。客户不直接操控原对象,而是通过代理对象间接地操控原对象。【代理模式UML图】: 其中:RealSubject 委托对象,Proxy 是代理对象。Subject 是委托对象和代理对象都共同实现的接口。Request() 是委托对象和代理对象共同拥有的方

2017-09-01 12:33:51 367 1

原创 【JavaWeb】Spring和它的IOC

Spring学习了有一段时间了,在学校做的项目以及在京东实习期间也是用到了基于Spring的SpringBoot和SpringCloud。古人云:学而不思则罔。古人又云:温故而知新。所以有必要总结一下Spring的基本知识和核心原理,以便今后更好地使用。 [TOC]Spring的架构 最核心的Spring Core Container(即Spring容器),其他都是可选的。在Spring框架重的

2017-08-28 01:45:02 676

原创 【设计模式】单例模式

说到单例模式,大家或多或少都听说过,尤其是懒汉式和饿汉式,几乎每一个Java程序员都信口拈来,但是却不是每个人都能信手拈来,尤其是信手拈来一个线程安全的单例模式了。这篇文字旨在总结常见的单例设计模式,并总结一些常跳的坑。懒汉式版本一,初识懒汉式很多人提到懒汉式都会写下如下版本:public class Singleton01 { //我比较懒,先不创建实例 private stati

2017-08-26 03:42:33 383

原创 模拟死锁的产生

上一篇介绍死锁的博客提到了死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。那么今天,我准备自己写一个程序来模拟死锁的产生。 简单起见,我这里只设置两个资源a, b。假如有一个线程持有a而想去获取b,而另一个线程持有b而恰巧又想获取a,那理论上正好可以满足死锁产生的四个条件。public class MutiThr

2017-08-23 16:47:23 479

原创 HTTP及HTTPS协议

HTTP协议什么是HTTP定义: HTTP中文叫做超文本传输协议,它完成客户端到服务端等一系列运作流程。HTTP 协议规定,请求从客户端发出,最后服务端响应该请求并返回。HTTP协议的特点无状态HTTP是一种无状态协议。即HTTP协议不对请求和响应之间的通信状态进行保存。所以使用HTTP协议,每当有新的请求发送,就会有对应的新响应产生。这样做的好处是更快地处理大量事务,确保协议的可伸缩性。

2017-08-22 11:40:31 462

原创 死锁及其预防

什么是死锁死锁产生的条件死锁的预防什么是死锁定义: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态,而这些永远在互相等待的进程称为死锁进程。死锁产生的条件死锁的出现必须同时满足以下四个条件,缺一不可。互斥:所谓互斥就是进程在某一时间内独占资源(更准确得说,对于某个资源访问有限制。若

2017-08-22 09:59:40 300

原创 序列化和反序列化BST

1 序列化:参考上一篇博客提到的前序遍历二叉树的方法,不难得出序列化BST的方法。其实就是通过前序遍历,将遍历到的节点依次存到字符串里面。2反序列化先将待反序列化的字符串内的元素按顺序存到队列内;将跟节点设为队列的头元素;遍历队列,找到大于根节点的元素,并以此为分界,分别递归调用队列的左区间和右区间;左区间返回的值作为跟节点的左孩子,右边返回的值作为根节点的右孩子。代码实现如下:publ

2017-08-17 17:52:44 297

原创 二叉树遍历几种常见方式

前序遍历递归版本public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<Integer>(); preHelper(root,res); return res; }public void preHelper(TreeN

2017-08-16 23:00:39 467

原创 Redis小结

redis数据类型redis底层的数据结构包括简单动态字符串,双端链表,字典,压缩列表,整数集合等等。但是redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包括:字符串对象(REDIS_STRING) 最常用,普通的key/value存储都可以归为此类,一个键最大能存储512MB。value 不仅可以是String,也可以是数字,或者序列化

2017-08-07 12:41:15 375

原创 数据库优化策略小结

数据类型的优化(1)MySQL数据类型整数类型: TinyInt,存储空间8, 字节长度1;SmallInt, 存储空间16, 字节长度2;MediumInt,存储空间24, 字节长度3;Int,存储空间32, 字节长度4;BigInt,存储空间64, 字节长度8;实数类型: Float:字节长度8,单精度浮点数;Double:字节长度16,双精度浮点数;Decimal:未打包的

2017-08-05 19:51:13 2787

原创 乐观锁与悲观锁的实现

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。下面将分别阐述这两种“锁”的区别与实现。悲观锁一、概念悲观锁,顾名思义,它持有一种非常悲观的态度,假设任何事务对数据的操作都会发生并发冲突。因此,在整个数据处理过程中,将数据处于锁定状态。 悲观

2017-08-05 13:57:56 1384 2

原创 观察者模式

定义结构源代码抽象目标类具体目标类抽象观察者接口具体观察者类客户端观察者模式的另一种形式定义 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对

2017-08-02 14:53:43 261

原创 HTML入门

什么是HTMLHTML文件结构HTML标签什么是HTMLHTML 指的是超文本标记语言 (Hyper Text Markup Language) 所谓的超文本就是指页面内可以包含图片、链接、甚至音乐、视频等非文字元素。HTML常与CSS、JavaScript一起被众多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。

2017-07-23 12:52:48 355

原创 ARP协议的工作原理

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。它的工作原理如下:(1)每台主机都会在自己的ARP缓冲区中 建立一个 ARP列表(地址转换表) ,以表示IP地址和MAC地址的对应关系;(2)当源主机需要将一个数据包要发送到目的主机时,会首先检 查自己 ARP列表中 是否存在该 IP地址对应的MAC地址,如果有,就 直

2017-04-14 14:39:46 2483

转载 【计算机网络】TCP/IP协议三次握手与四次握手流程解析

一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq

2017-04-02 23:11:51 300

原创 【JavaWeb】JSP技术

JSP简介JSP本质是一个servlet,它是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。运行原理和九大隐式对象jsp运行主要是由tomcat服务器完成(tomcat的work目录下存放jsp运行时的临时文件)。(1)每个JSP在第一次被访问时,JS

2017-03-29 00:17:20 341

原创 链表

概念链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。创建链表下面的代码实现了基本的

2017-03-28 16:44:29 246

原创 数组与字符串

大家都知道什么是数组与字符串,这里不再累述。重点放在数据结构相关的一些技巧和问题的总结上。请注意,数组问题与字符串问题往往是相通的。很多数组问题都可以以字符串的形式出现,反之亦然。散列表散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称

2017-03-25 12:44:01 468

原创 二叉查找树

定义二叉查找树(Binary Search Tree),也称二叉搜索树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。

2017-03-22 21:19:09 189

转载 【数据库】数据库优化的八种经典方式

1、选取最适用的字段属性  MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。  例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的

2017-03-12 00:11:13 512

原创 【数据库】事务

定义所谓的事务,它是一个操作序列,这些 操作要么都执行,要么都不执行,它是一个不可分割的工作单位。所以,事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。数据库事务的存在包含有以下两个目的: (1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 (2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供

2017-03-11 22:14:48 455

原创 【数据库】三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。在实际开发中最为常见的设计范式有三个:第一范式在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。第一范式是指数据库表中的所有字段值都是不可分解的

2017-03-11 20:58:06 381

原创 【集合源码】HashMap源码解析(基于JDK 1.8)

HashMap简介源码解析小结HashMap简介1.基于JDK 1.8的HashMap有三种数据结构,数组,链表,红黑树。2.HashMap是非线程安全的。多线程环境下可以采用concurrent并发包下的concurrentHashMap。3.HashMap存储的内容是键值对(key-value)映射,key、value都可以为null。4.HashMap中的映射不是有序的。5.实现了Clon

2017-03-09 13:15:56 479

原创 【JavaWeb】利用Session保存用户登录信息

上一篇博客提到,为了安全起见,session常常用来保存用户的登录信息。那么服务器是怎么来实现的呢?这里我简单模拟一下。第一步,编写登录主页:<!DOCTYPE html><html> <head> <title>登陆页面</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

2017-03-02 15:48:02 83748 10

转载 【操作系统】进程间通信的方式

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上

2017-02-28 15:47:46 450

原创 【操作系统】线程间实现同步的方式

同步与互斥的区别与联系很多人不知道同步和互斥有什么区别(包括以前的我)。其实同步和互斥也是有很大联系的:互斥:是指散布在不同进程(线程)之间的若干程序片断,当某个进程(线程)运行其中一个程序片段时,其它进程(线程)就不能运行它们之中的任一程序片段,只能等到该进程(线程)运行完这个程序片段后才可以运行。同步:是指散步在不同进程(线程)之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来

2017-02-28 15:34:17 4340

原创 【Javaweb】cookie和session

cookie和session入门cookie和session入门cookie什么是cookie原理一些细节Session什么是Session原理常见应用Cookie和Session区别典型区别总结cookie什么是cookie在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都纪录下来。当下次你再光临同一个网站,

2017-02-27 15:24:32 433

原创 经典排序算法之:堆排序

背景及原理1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )。堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的

2017-02-21 13:38:30 344

原创 【JavaWeb】Servlet总结

Servlet入门Servlet入门Servlet简介第一个Selvlet程序 Servlet的缺省路径Servlet简介Servlet(Server Applet)是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Serv

2017-02-14 21:36:14 442

原创 【JavaWeb】Http协议

Http协议入门Http协议入门从 一个例子入手http请求请求行http协议版本请求资源请求方式请求头实体内容http响应响应行http协议版本状态码 服务器处理请求的结果状态状态描述响应头从 一个例子入手(1)启动tomcat服务器; (2)在浏览器(这里用的Chrome)输入URL: http://http://localhost:8080/my

2017-02-13 17:54:12 469

原创 【JavaWeb】Tomcat

Tomcat入门:Tomcat入门下载安装和启动Tomcat的目录结构Tomcat总体结构JavaWeb应用的组成结构下载、安装和启动1)到apache官网 下载】2)安装版:window (exe、msi) linux(rmp) 压缩版:window(rar,zip) linux(tar,tar.gz)3)启动软件 a)找到%t

2017-02-13 10:41:49 246

原创 【Java网络编程】TCP协议(含代码)

Java中的TCP协议:TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的Serv

2017-02-07 21:20:54 621

空空如也

空空如也

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

TA关注的人

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