自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 volatile 关键字

 前言不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。首先来看看为什么会出现这个关键字。内存可见性由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存...

2019-02-14 10:34:23 136

转载 HashMap

前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具...

2019-01-31 10:52:05 111

转载 对象的创建与内存分配

创建对象当 JVM 收到一个 new 指令时,会检查指令中的参数在常量池是否有这个符号的引用,还会检查该类是否已经被加载过了,如果没有的话则要进行一次类加载。接着就是分配内存了,通常有两种方式:指针碰撞 空闲列表使用指针碰撞的前提是堆内存是完全工整的,用过的内存和没用的内存各在一边每次分配的时候只需要将指针向空闲内存一方移动一段和内存大小相等区域即可。当堆中已经使用的内存和未使...

2019-01-31 10:28:19 247

原创 SQL 优化

负向查询不能使用索引select name from user where id not in (1,3,4);应该修改为:select name from user where id in (2,5,6);前导模糊查询不能使用索引如:select name from user where name like '%zhangsan'非前导则可以:sel...

2019-01-30 16:14:34 117

原创 git总结

创建版本库初始化一个Git仓库,使用git init命令。添加文件到Git仓库,分两步:使用命令git add <file>,注意,可反复多次使用,添加多个文件; 使用命令git commit -m <message>,完成。 要随时掌握工作区的状态,使用git status命令。 如果git status告诉你有文件被修改过,用git diff...

2018-08-03 10:06:32 81

转载 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。...

2018-07-28 13:27:14 188

转载 多线程的优缺点

一、多线程的优点:    多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:   (1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;  (2)当前没有进行处理的任务时可以将处理器时间让给其它任务;  (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;  (4)可以随...

2018-07-27 17:06:40 5475

转载 动态代理:JDK动态代理和CGLIB代理的区别

代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。而AOP,是通过动态代理实现的。一、简单来说:  JDK动态代理只能对实现了接口的类生成代理,而不能针对类  CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)二、Spring在选择用JDK还是CGLi...

2018-07-25 13:52:25 82

原创 string创建方式

常量池是JVM的一块特殊的内存空间。和堆没什么关系1.String s1 = "ubuntu";     String s2 = “ubuntu”;2.String s3 = new String("ubuntu");     String s4 = new String("ubuntu");  ...

2018-07-23 17:50:47 177

转载 异常

 异常分类在java中,异常对象都是派生于Throwable类的一个实例。如果java内置的异常类不能够满足需求,用户还可以创建自己的异常类。下图是java异常类层次结构图 可以看出,所有的异常都是由Throwable类,下一层分解为两个分支:Error和Exceprion。 Error层次结构描述了java运行时系统的内部错误和资源耗尽错误。大多数错误与代码编写者执行的操作无关,而...

2018-07-23 10:19:22 146

转载 Session和Cookie的区别与联系

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。4、单个cookie保存的数据不能超过4K,很多浏览器都限...

2018-07-23 09:51:37 106

转载 MyBatis与Hibernate有哪些不同?

Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关...

2018-07-17 09:06:46 843

转载 Spring MVC 的请求流程

Spring MVC执行流程Spring MVC启动过程依据这两个配置大致分为两个过程:1、ContextLoaderListener初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。2、DispatcherServlet初始化,建立自己的上下文,也注册到ServletContext中。 每当用户在 Web 浏览器中点击链接或者提交表单的时候,请求就...

2018-07-14 13:34:09 180

转载 forward 与 redirect 的区别

1.请求转发(forward)又叫做直接转发方式,客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。比如:从 AServlet 请求转发到 BServlet语法:request.getRequestDispatcher(path).forward(request, respons...

2018-07-14 12:47:46 143

转载 数据连接池的工作机制是什么?

数据库连接是一种关键的有限的昂贵的资源,这一点企业级应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连...

2018-07-12 11:52:19 422 1

转载 JSP有哪些动作?作用分别是什么?

JSP共有以下6种基本动作  作用如下:jsp:include:在页面被请求的时候引入一个文件。includ两种方法的实现 :有两种实现方法,动态,静态。动态:用于包含动态页面,并且可以随时检查页面的变化,采用jsp:include动作可以实现,例如:   <jsp:includepage="***.jsp" flush="true"/>静态,适合于包含静态页面,不检查页面的变化,采用...

2018-07-12 11:39:44 3259

转载 JDK、JRE、JVM关系是什么?

JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE。开发工具如:用于编译java程序的javac命令、用于启动JVM运行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。 JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序...

2018-06-29 08:40:33 265

原创 AOP与IOC的概念(即spring的核心)

a) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度。而spring的核心是IOC控制反转和AOP面向切面编程。IOC控制反转主要强调的是程序之间的关系是由容器控制的,容器控制对象,控制了对外部资源的获取。而反转即为,在传统的编程中都是由我们创建对象获取依赖对象,而在IOC中是容器帮我们创建对象并注入依赖...

2018-06-27 11:31:01 601

转载 Java设计模式思想(单例模式,工厂模式,策略模式,共23种设计模式)

a) 单例模式:单例模式核心只需要new一个实例对象的模式,比如数据库连接,在线人数等,一些网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登陆的时候取出来加一再放回去,有人退出登陆的时候取出来减一再放回去,但是当有两个人同时登陆的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,所以需要一个全局变量的对象给全部人使用,只需要new出一个...

2018-06-27 11:05:14 279

转载 spring mvc 工作流程

SpringMVC流程1、  用户发送请求至前端控制器DispatcherServlet。2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、  DispatcherServlet调用Ha...

2018-06-26 13:47:36 118

原创 Java中的String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。1.运行速度:StringBuilder > StringBuffer > StringString对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。2.线程安全:在线程安全上,StringBuilder是线程不安全...

2018-06-26 10:26:03 120

空空如也

空空如也

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

TA关注的人

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