自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

duanduan_l的博客

学习记录

  • 博客(76)
  • 收藏
  • 关注

原创 JVM垃圾回收相关问题整理

哪些引用对象可以作为GC ROOT?JVM垃圾回收的根对象的范围有以下几种:虚拟机栈中的引用对象 方法区中的类静态属性引用对象 方法区中常量引用的对象(final的常量值) 本地方法栈JNI(Java本地接口/Java Native Interface)的引用对象JVM垃圾回收过程关于堆内存的结构划分?在JVM中堆空间划分如下图所示上图中,刻画了Java程序运行时的堆空...

2019-09-28 11:18:45 366

原创 框架面试总结1

谈谈对Spring IOC和DI的理解IOC是一种叫做“控制反转”的设计思想。1、较浅的层次——从名字上解析“控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)。“反转”就是指对 对象的创建、维护、销毁等生命周期的控制由程序控...

2019-09-25 20:27:30 188

转载 Mysql执行计划

写在最前面本文主要介绍mysql执行计划各个字段的作用,以及如何利用Mysql执行计划优化我们的Sql,本文主要面向后端开发程序员,以及需要和数据库打交道的同学们。1、什么是Mysql执行计划所谓的执行计划就是Mysql如何执行一条Sql语句,包括Sql查询的顺序、是否使用索引、以及使用的索引信息等内容。一个例子:基本语法explain select ...复制代...

2019-09-22 21:39:42 215

转载 造成类在多线程时不安全的原因

线程安全的类定义: 不存在竞态条件(类中不存在被修改的成员变量),或存在时进行了同步控制。多线程不安全的原因-竞态条件/临界区同一个程序运行在多个线程中本身不会有线程安全问题,问题在于多个线程访问共享资源时存在,如:类成员变量(普通或静态变量),系统共享资源(文件,数据库)等。同时只有多个线程同时对这些资源进行了写的操作时才会发生线程安全问题,不对资源的进行修改时就不会存在问题。...

2019-09-22 20:05:24 476

原创 常问整理

gc触发条件Minor GC触发条件:当Eden区满时,触发Minor GC。Full GC触发条件:(1)调用System.gc时,系统建议执行Full GC,但是不必然执行(2)老年代空间不足(3)方法区空间不足(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存(5)由Eden区、From Space区向To Space区复制时,对象大小大于To ...

2019-09-10 21:55:28 161

转载 TCP通信粘包问题分析和解决(全)

在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法( Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。对于UDP,不会...

2019-09-10 18:46:55 158

转载 访问一个网页的全过程

引言打开浏览器,在地址栏输入URL,回车,出现网页内容。整个过程发生了什么?其中的原理是什么?以下进行整理和总结。整个过程可以概括为几下几个部分:域名解析成IP地址;与目的主机进行TCP连接(三次握手);发送与收取数据(浏览器与目的主机开始HTTP访问过程);与目的主机断开TCP连接(四次挥手);正文下面详细介绍其中的原理:1. 域名解析成IP地址访问目标地址有两种方式:①使用目标...

2019-09-09 21:58:13 922

原创 Java复习(二)

什么是值传递和引用传递?值传递是对基本变量而言,传递的是变量的副本,改变副本不会影响本身;引用传递一般是对对象型变量而言,传递的是该对象地址的副本,而不是对象本身,一般来说,Java中的基本类型传递是值传递,实例对象传递是引用传递。数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList? 数组初始化时必须指定大小,而Array...

2019-09-09 21:55:37 117

原创 Java复习(一)

多线程线程同步有哪些方式?答:首先说一下,多线程为什么要线程同步?当多个线程同时访问一个变量或对象,如果这些线程既有读操作又有写操作时,会造成变量值或对象的状态造成混乱,导致程序出现异常。如,银行存取钱问题,一个线程负责取钱100元,另一个线程负责存钱100元,当前账户余额为0元,取钱不成功,银行余额为100元,取钱成功了,余额为0元,到底是什么操作造成的,说不清楚,需要线程同步来解决。(...

2019-09-04 16:17:54 407

原创 生产者消费者模型的三种实现方式

某个线程或模块的代码负责生产数据(工厂),而生产出来的数据却不得不交给另一模块(消费者)来对其进行处理,在这之间使用了队列、栈等类似超市的东西来存储数据(超市),这就抽象除了我们的生产者/消费者模型。其中,产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者;生产者和消费者之间的中介就叫做缓冲区。为什么要使用生产者-消费者模型生产者消费者模型通过一个容器解决生产者和消费...

2019-09-02 20:01:43 1454

转载 一次服务端大量CLOSE_WAIT问题的解决

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...

2019-08-29 15:30:41 325

原创 SpringMVC(一)入门

在Spring框架之IOC一文中我们在文章开始就已经介绍了Spring框架的几大板块,其中就包括SpringMVC,也就是说SpringMVC是Spring框架的一部分,提供了前台展示相关内容的web框架,SpringMVC的底层实现上需要用到servlet。而MVC(Model View Control)表示:Model 数据(bean,dao)View 页面(JSP) Cont...

2019-07-12 17:58:35 259

原创 Spring框架之AOP

什么是AOPAOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。Spring AOP就是基于动态代理的(关于动态代理的内容我们已经在MyBatis(三)动态代理中介绍过了)如果要代理的...

2019-07-09 19:35:47 114

原创 Spring框架之IOC

什么是Spring框架? Spring框架是一种开发框架,它的使用有助于提升开发人员的开发效率以及系统的可维护性。它由很多模块组成,框架示意图如下:Spring AOP:提供面向切面的编程实现。Spring ORM:用于支持Hibernate等ORM(关系规则映射)工具。Spring DAO:提供事务支持,JDBC支持等与数据库相关。Spring Web:提供面向切面...

2019-07-08 21:18:46 158

原创 MyBatis(七) 逆向工程

什么是MyBatis逆向工程?逆向工程就是:创建好数据库表之后,MBG可以根据数据库表自动为您生成pojo类、example类(用于添加条件,相当where语句后面的部分 )、mapper文件需求:通过MySQL数据库存在的库表生成自定义对象,接口,xml配置MyBatis逆向工程的使用mybatis-generator使用步骤:1、通过maven管理jar包依赖<...

2019-06-20 11:02:14 165

原创 MyBatis(六)懒加载与缓存机制

懒加载 假设我们现在有一个需求:查询订单信息,有时候需要关联查询用户信息 第一种方法:直接关联查出用户的信息 1 select * from orders o ,user u where o.user_id = u.id;   分析:  ①、这里我们一次查询出所有的信息,需要什么信息的时候直接从查询的结果中筛选。但是如果订单和...

2019-06-19 18:17:18 461

原创 MyBatis(五)高级映射

在关系型数据库中,经常要处理一对一,一对多的关系,在MyBatis中可以轻松解决这种问题,下面我们将分别介绍一对一映射,一对多映射和多对多映射。本文中的映射举例设计四个表:用户表(user),订单表(orders),订单明细表(orderdetail),商品表(items)。一对一映射 假设现在有两个表:用户表和订单表,我们可以发现:一个订单只能对应一个用户,则由订单表到用户...

2019-06-17 21:42:20 269

原创 MyBatis(四)动态SQL

MyBatis的强大特性之一 便是动态SQL。由于JDBC或类似框架需要根据不同条件拼接SQL语句时不仅不能忘了必要的空格,还要注意省略掉列名列表最后的的逗号,处理方式比较麻烦,而动态SQL可以摆脱这些问题。这里主要介绍计中MyBatis的动态SQL在XML文件中支持的几种标签。if标签 if标签通常用于where语句,通过判断参数值来决定是否使用某个查询条件,也常用于updat...

2019-06-14 21:31:16 282

原创 MyBatis(三)动态代理

在介绍MyBatis动态代理前。我们先介绍一下什么是代理模式。代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。 代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对...

2019-06-12 21:53:49 622

原创 MyBatis(二)接口绑定方式介绍(xml和注解)

MyBatis的真正强大之处在于其映射语句。由于其映射语句很强大,映射器的XML文件就显得相对简单。若将其与具有相同功能的JDBC代码进行对比,会发现,使用这种方法节省了近95%的代码量。MyBatis3.0相较2.0版本一个最大的变化,就是支持使用接口来调用方法。MyBatis使用Java的动态代理可以直接通过接口来调用相应的方法,不需要提供接口的实现类,也不需要在实现类中使用SqlSess...

2019-06-12 21:10:33 3518 1

原创 MyBatis(一)基本用法介绍

什么是MyBatis? MyBatis的前身是iBATIS,是一个开源项目,最初侧重与密码软件的开发,后来发展为基于Java的持久层框架。MyBatis是一款优秀的支持自定义SQL查询,存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的搜索,MyBatis可以使用XML或注解进行配置和映射,MyBatis通过将参数映射到配置的SQL形成最终执行...

2019-06-10 21:36:41 1686

转载 大话keepalive

大话keepalive我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的。tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方端掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST,而不是ACK,那么就释放当前链接。设想一下,如果tcp层没有keepalive的机制,一...

2019-05-28 21:54:07 71

原创 Linux基本命令总结

本文主要总结一些常用的Linux命令。系统登录Linux默认提供6个Terminal供用于登录,切换方式为Ctrl+Alt+[F1-F6],名称分别为tty1-tty6,使用Ctrl+Alt+F7可切换至图形界面。 若以纯文本环境启动Linux,若想启动图形界面,可使用startx命令启动图形界面。 使用man + 命令可查看帮助,如man date。 使用shutdown命令关机,...

2019-05-18 20:17:00 135

原创 JavaSE考试知识点分析

1、final、 finally、 finalize 三个关键字的区别是(ABC)A)final 是修饰符(关键字)可以修饰类、方法、变量B)finally在异常处理的时候,提供finally块执行任何清除操作C)finalize是方法名,在垃圾收集器将对象从内存中清除出去之前做D)finally 和 finalize 一样都是用异常处理的方法分析:本题主要考察final,fin...

2019-05-13 20:41:39 530

转载 Linux中的逻辑地址,虚拟地址,物理地址

物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是...

2019-05-05 15:54:31 227

转载 浅析JVM垃圾回收

1.什么是垃圾回收?    垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。    注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。换言之,垃圾回收只会负责释放那些对象占有的内...

2019-05-03 17:00:24 162

原创 浅析Java虚拟机体系结构

1、什么是Java虚拟机 大家都知道Java语言被称为是跨平台语言,那么它为什么具有跨平台性,而什么叫做跨平台性呢?跨平台性的意思就是:Java程序的执行与底层操作系统无关,一次编译,到处执行,这种跨平台就得益于JVM(Java虚拟机)。在了解Java虚拟机前,我们先了解Java技术体系:JRE,JDK,JVM JRE(Java Runtime Entert...

2019-04-25 21:41:07 185

原创 MySQL数据库存储引擎及事务处理

插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据需要选择如何使用存储和索引数据等。MySQL支持多种存储引擎,本文主要介绍三种存储引擎InnoDB,MyISAM以及MEMORY,然后再介绍MySQL的事务处理相关内容。1、MySQL存储引擎 MySQL默认的存储引擎是InnoDB,可以根据不同需求进行更改。1.1 存储引擎设置查看MYSQL支持的存储引擎命令...

2019-04-03 21:01:05 414

原创 MYSQL之索引(基本操作及底层原理)

MYSQL中很重要的一个知识点,也是面试的常考点:索引。本文将主要从索引的概念,优缺点,分类,基本操作以及底层原理五个方面为大家进行介绍,至于索引的优化问题将在下一篇文章中进行介绍。什么是索引 索引是创建在表上的,是对数据库表中的一列或多列的值进行排序的一种结构。索引可以提高查询速度,通过索引,查询数据时可以不必读完记录的所有信息,只是查询索引列,从而有效提高数据库...

2019-04-02 18:18:54 189

原创 MYSQL基本操作

数据库介绍MYSQL采用c/s的客户端服务器模型,客户端通过连接服务器进行数据的增删改查操作,服务端方便进行集群化处理,主从复制;MYSQL服务端模型采用IO复用+线程池来实现;DDL:数据定义语言常用关键字:create,drop,alter等操作DML:数据操作语言常用关键字:insert,delete,update,select等DCL(Data Contro...

2019-03-30 17:41:21 172

转载 Java 中的 ==, equals 与 hashCode 的区别与联系

一、概述1、概念== : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系equals : Object 的 实例方法,比较两个对象的content是否相同hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数二、关系操作符 ==1、操作数的值基本数据类型变量在J...

2019-03-30 15:36:46 141

转载 二叉树的前序,中序,后序遍历方法总结

二叉树的前序遍历,中序遍历,后序遍历是面试中常常考察的基本算法,关于它的概念这里不再赘述了,还不了解的同学可以去翻翻LeetCode的解释。这里,我个人对这三个遍历顺序理解是:前中后这三个词是针对根节点的访问顺序而言的,即前序就是根节点在最前根->左->右,中序是根节点在中间左->根->右,后序是根节点在最后左->右->根。无论哪种遍历顺序,用递归...

2019-03-27 17:47:38 706

原创 Netty中零拷贝的理解

首先,我想介绍一下传统上零拷贝的含义,事实上,Netty中的零拷贝又有所区别,最后再介绍Netty中零拷贝的四种实现方式。数据传输的相关概念 计算机早期的数据传输方式:整个流程:CPU主动启动I/O设备; CPU不断询问I/O设备是否准备好; 若I/O设备准备好了,CPU开始从I/O设备中读数据; CPU将数据传输给主存。从整个数据传输流程可以看出:CPU是一...

2019-03-22 15:48:24 1291 1

原创 Netty ByteBuf与NIO ByteBuffer

Netty中引入了ByteBuf,相较于NIO中的ByteBuffer有了一下改进,使得网络编程更加简便。ByteBuffer的缺点 在NIO的Buffer中,我们已经知道Buffer有七种,最常用的是ByteBuffer,而ByteBuffer也有一些局限性: ByteBuffer的长度是固定的,一旦分配完成就不能进行扩容和收缩,当需要操作的对象大于Buffer的容量时...

2019-03-20 21:54:29 3567

原创 Netty框架简述

Netty是什么? Netty 是一个广泛使用的 Java 网络编程框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty 的内部实现时很复杂的,但是 Netty 提供了简单易用的 api 从网络处理代码中解耦业务逻辑。 Netty 是完全基于 NIO 实现的,实际上相当于NIO+多线程,所以整个 Netty ...

2019-03-19 21:53:54 977

转载 Java NIO之多路复用器(Selector)

多路复用器Selector是Java NIO编程的基础,熟练地掌握Selector对于掌握NIO编程至关重要。多路复用器提供选择已经就绪的任务的能力。简单来讲,Selector会不断地轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读和写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的...

2019-03-15 20:35:51 2535

原创 Java NIO之通道(channel)

什么是通道? 通道(Channel)是 java.nio 的第二个主要创新。它们提供与 I/O 服务的直接连接。Channel 用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。通道是一种途径,借助该途径,可以用最小的总开销来访问操作系统本身的 I/O 服务。缓冲区则是通道内部用来发送和接收数据的端点。创建通道 通道主要分为...

2019-03-15 16:34:04 1198

原创 缓冲区(Buffer)

本文主要介绍缓冲区的特点,作用以及基本操作。 一个Buffer对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。非字节缓冲区可以在后台执行从字节或到字节的转换,这取决于缓冲区是如何创建的。属性 ...

2019-03-15 15:59:46 2751

原创 Java NIO简述

本文首先介绍NIO涉及到的相关概念,然后将介绍NIO的编程流程以及示例,最后简述NIO涉及的相关问题解答。Java New IO(NIO)是从Java1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。主要涉及三个概...

2019-03-05 14:33:34 111

原创 Java I/O模型

本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞。同时将NIO和BIO进行了对比。1、同步,异步,阻塞,非阻塞 从内核角度看I/O操作分为两步:用户层API调用;内核层完成系统调用(发起I/O请求),所以,同步,异步针对用户的API调用阻塞,非阻塞针对IO请求;同步与异步: 简单来说,同步与异步的重点在于当有多个任务和事件发生时,...

2019-02-28 17:26:34 144

空空如也

空空如也

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

TA关注的人

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