7 风兮~

尚未进行身份认证

暂无相关简介

等级
TA的排名 11w+

JAVA的内存结构

1、运行时数据区 JVM所管理的内存包括以下几个运行时数据区域,如图所示 方法区和堆为线程共享区,虚拟机栈、本地方法栈及程序计数器为线程独占区。 程序计数器 程序计数器是一块较小的空间,它可以看作是当前线程所执行的字节码的行号指示器。 如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址(可以理解为上图所...

2018-08-01 09:41:28

JAVA并发编程的基础

1、线程简介 什么是线程? 操作系统在运行一个程序时,会为其创建一个进程。 线程是操作系统调度的最小单元,也叫轻量级进程。 在一个进程里可以创建多个线程,这些线程拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。 多个线程能够同时执行(处理器在这些线程上高速切换,让使用者感觉这些线程是在同时执行),显著提...

2018-07-31 17:02:24

JAVA并发编程的挑战

1、上下文切换 单核CPU是如何实现多个线程同时实现的? CPU通过时间片分配算法来循环执行任务,如系统中有三个线程,那么对于CPU来说就是不断的在这三个线程中循环切换执行。 因为CPU的运行速度相当快,所以我们人类感觉不到这个切换的过程,所以会任务这几个线程是同时执行的。 线程切换的时候,CPU会保存当前线程的任务状态,以便于下次切换回这个线程时可...

2018-07-24 16:46:20

JAVA中的类型自动转换机制

1、概述自动类型转换也叫隐式类型转换表达式的数据类型自动提升所有的byte型、short型和char的值将被提升到int型。如果一个操作数是long型,计算结果就是long型;如果一个操作数是float型,计算结果就是float型;如果一个操作数是double型,计算结果就是double型。2、数据类型只会自动提升,不能自动降低int值可以赋值给long、float、double型变量,不能赋值给...

2018-07-04 08:40:19

MYSQL建表时数据类型的选择

1、为表中的字段选择合适的数据类型当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。2、如何选择正确的整数类型类型大小范围(SIGNED)范围(UNSIGNED)用途TINYINT1 字节(-128,127)(0,255)小整数值,如年龄SMALLINT2 字节(-32768,32 767)(0,...

2018-06-09 15:49:21

SpringBoot配置模板引擎之视图解析器失效问题排查

  1、问题排查    在整合SpringBoot与Httl模板引擎的时候,博主曾遇到过这样的问题:通过浏览器访问一个Controller方法时,返回httl视图,但页面报404错误。    通过断点调试,访问url时,能进入到我们自定义的接口方法,所以此处可以断定该404错误是由视图解析器无法渲染返回的view所造成的。            继续往下调式,当到了DispatcherServle...

2018-04-21 15:23:38

如何快速准确的识别出一个文件的具体类型

  有人可能会说通过文件的后缀名就可以知道文件的类型是什么,但别忘了,后缀名是可以被修改的。同时,当我们遇到一个不带后缀名的文件的时候,难道我们就束手无策了吗?  显然不是。我们知道,在计算机的世界中,所有文件都是通过二进制中的0101来进行描述的,而计算机是如何来判断各个文件的文件类型的呢?答案就是通过魔数来进行判断。  什么是魔数?魔数就是一个文件二进制形式的前4个字节,如java...

2018-04-01 10:56:38

使用一个超简单的类实现一个简易服务器,明白Tomcat的运行机制

代码如下:package bear.网络通讯;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWrite...

2018-03-17 17:51:04

Spring Mvc使用Jackson进行json转对象时,遇到的字符串转日期的异常处理(Can not deserialize value of type Date from String)

1、问题排查 出现的场景: 服务端通过springmvc写了一个对外的接口,返回一个json字符串,其中该json带有日期,格式为yyyy-MM-ddHH:mm:ss 客户端通过feign调用该http接口,指定返回值为一个Dto,Dto中日期的字段为Date类型 客户端调用该接口后抛异常了。 报错异常如下: feign.co...

2018-03-09 22:16:28

【线程安全的List】CopyOnWriteArrayList的原理及使用

1、原理CopyOnWriteArrayList是一个线程安全的ArrayList如果一段并发程序,读操作明显多于写操作的话,那么使用CopyOnWriteArrayList的性能会比Vector更高CopyOnWriteArrayList的实现原理就是读写分离,它对所有的写操作都使用ReentrantLock来加锁,对所有的读操作都不加锁,那它是怎么保证线程安全性问题的呢?CopyOnWrite...

2018-03-08 07:51:52

HashMap及ConcurrentHashMap基本原理概述

0、前言本博文部分文字及图片参考自以下三篇文章,其余内容为本人经过思考及总结后所写,仅作为学习分享使用,如有侵权,请联系本人删除,谢谢。1、什么是HashMap2、高并发下的HashMap3、什么是ConcurrentHashMap?1、HashMap基本原理众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个...

2018-03-01 20:40:24

模板模式

1、概述模板模式:封装了一个算法步骤(prepareRecipe),并允许子类为一个或多个步骤方法提供实现模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。模板是一个抽象类,模板中所包含的内容:1、算法步骤,使用final修饰,子类不可更改2、已经实现的方法,使用final修饰,子类不可更改3、抽象的方法4、hook,子类可选项如泡茶喝泡咖啡,总共有以下四个步骤:1、烧开水2、...

2018-02-25 15:49:49

JDK1.5提供的原子类原理及使用

JDK提供的原子类原理及使用volatile只能保障可见性,不能保障原子性,如value++操作,就不是一个原子性操作,value++共分为以下三步操作(假如value的值是0):1、取出value的值为0;2、将value的值进行加一操作,得到一个新值为1;3、将新值1再赋值给变量value。假如线程1刚执行完了第二步,此时value的值依然为0,得到的新值为1,然后就轮到线程2执行。线程2执行...

2018-02-24 15:15:10

JAVA内存的可见性

1、JMM通俗地讲,就是描述Java中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。JMM对共享内存的操作做出了如下两条规定:线程对共享内存的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写;不同线程无法直接访问其他线程工作内存中的变量,因此共享变量的值传递需要通过主内存完成。2、内存的可见性可见:一个线程修改了这个变量的值,在另外...

2018-02-21 16:26:25

JAVA线程概述

1、线程名称以下代码输出Thread-0、Thread-1,因为虽然线程没开启,但在对象创建的时候就已经定义好名称了package bear.utils;public class MainTest { public static void main(String[] args) { Deom d1 = new Deom(); Deom d2 = new Deom(); ...

2018-02-16 23:11:18

JAVA反射

1、概述JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法对于任意一个对象,都能够调用它的任意一个方法和属性这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。动态获取类中信息,就是java反射 。可以理解为对类的解剖。要想要对字节码文件进行解剖,必须要有字节码文件对象,如何获取字节码文件对象呢?2、获取字节码对象的方式1、Ob...

2018-02-12 16:26:55

排序算法

1、常用的排序算法内部排序(所有的排序流程都是在内存中完成)插入排序直接插入排序希尔排序选择排序简单选择排序堆排序交换排序冒泡排序快速排序归并排序基数排序外部排序(要用到内存和外存)2、插入排序直接插入排序例子:8,2,4,9,3,61)选定第一个数8,此时8是有序的 8 2,4,9,3,62)将2插到8的前面,此时2,8是有序的 2,8 4,9,3,63)...

2018-02-08 20:42:36

JAVA异常机制

1、概述异常:是在运行时期发生的不正常情况。在java中用类的形式对不正常情况进行了描述和封装对象,描述不正常的情况的类,就称为异常类。以前是将正常流程代码和问题处理代码写在一起,现在将正常流程代码和问题处理代码分离。提高阅读性。早期代码if (time < 0) { // 处理办法。 // 处理办法。 // 处理办法。 return 1}if (time > 10000...

2018-02-08 17:49:12

单例模式

1、饿汉式(开发中用这种)类一加载,对象就已经存在了。class Single { private static Single s = new Single(); private Single(){} public static Single getInstance() { return s; }}2、懒汉式类加载进来,没有对象,只有调用了getInstance方法时,才会创...

2018-02-06 19:30:25

JVM内存分配策略原

1、优先分配到edenpackage 深入理解java虚拟机;public class 对象优先分配到eden区 { /** * 1M的内存大小 */ private static final int _1MB = 1024 * 1024; /** * jvm参数设置:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGC

2018-01-31 23:47:51

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!