java se
文章平均质量分 84
风兮~
这个作者很懒,什么都没留下…
展开
-
排序算法
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 · 205 阅读 · 0 评论 -
JAVA并发编程的基础
1、线程简介 什么是线程? 操作系统在运行一个程序时,会为其创建一个进程。 线程是操作系统调度的最小单元,也叫轻量级进程。 在一个进程里可以创建多个线程,这些线程拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。 多个线程能够同时执行(处理器在这些线程上高速切换,让使用者感觉这些线程是在同时执行),显著提...原创 2018-07-31 17:02:24 · 403 阅读 · 0 评论 -
JAVA并发编程的挑战
1、上下文切换 单核CPU是如何实现多个线程同时实现的? CPU通过时间片分配算法来循环执行任务,如系统中有三个线程,那么对于CPU来说就是不断的在这三个线程中循环切换执行。 因为CPU的运行速度相当快,所以我们人类感觉不到这个切换的过程,所以会任务这几个线程是同时执行的。 线程切换的时候,CPU会保存当前线程的任务状态,以便于下次切换回这个线程时可...原创 2018-07-24 16:46:20 · 362 阅读 · 0 评论 -
JAVA中的类型自动转换机制
1、概述自动类型转换也叫隐式类型转换表达式的数据类型自动提升所有的byte型、short型和char的值将被提升到int型。如果一个操作数是long型,计算结果就是long型;如果一个操作数是float型,计算结果就是float型;如果一个操作数是double型,计算结果就是double型。2、数据类型只会自动提升,不能自动降低int值可以赋值给long、float、double型变量,不能赋值给...原创 2018-07-04 08:40:19 · 12571 阅读 · 0 评论 -
模板模式
1、概述模板模式:封装了一个算法步骤(prepareRecipe),并允许子类为一个或多个步骤方法提供实现模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。模板是一个抽象类,模板中所包含的内容:1、算法步骤,使用final修饰,子类不可更改2、已经实现的方法,使用final修饰,子类不可更改3、抽象的方法4、hook,子类可选项如泡茶喝泡咖啡,总共有以下四个步骤:1、烧开水2、...原创 2018-02-25 15:49:49 · 897 阅读 · 0 评论 -
使用一个超简单的类实现一个简易服务器,明白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 · 2835 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
JAVA内存的可见性
1、JMM通俗地讲,就是描述Java中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。JMM对共享内存的操作做出了如下两条规定:线程对共享内存的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写;不同线程无法直接访问其他线程工作内存中的变量,因此共享变量的值传递需要通过主内存完成。2、内存的可见性可见:一个线程修改了这个变量的值,在另外...原创 2018-02-21 16:26:25 · 337 阅读 · 0 评论 -
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 · 307 阅读 · 0 评论 -
单例模式
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 · 184 阅读 · 0 评论 -
HashMap及ConcurrentHashMap基本原理概述
0、前言本博文部分文字及图片参考自以下三篇文章,其余内容为本人经过思考及总结后所写,仅作为学习分享使用,如有侵权,请联系本人删除,谢谢。1、什么是HashMap2、高并发下的HashMap3、什么是ConcurrentHashMap?1、HashMap基本原理众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个...原创 2018-03-01 20:40:24 · 2299 阅读 · 0 评论 -
JAVA异常机制
1、概述异常:是在运行时期发生的不正常情况。在java中用类的形式对不正常情况进行了描述和封装对象,描述不正常的情况的类,就称为异常类。以前是将正常流程代码和问题处理代码写在一起,现在将正常流程代码和问题处理代码分离。提高阅读性。早期代码if (time < 0) { // 处理办法。 // 处理办法。 // 处理办法。 return 1}if (time > 10000...原创 2018-02-08 17:49:12 · 187 阅读 · 0 评论 -
JAVA反射
1、概述JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法对于任意一个对象,都能够调用它的任意一个方法和属性这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。动态获取类中信息,就是java反射 。可以理解为对类的解剖。要想要对字节码文件进行解剖,必须要有字节码文件对象,如何获取字节码文件对象呢?2、获取字节码对象的方式1、Ob...原创 2018-02-12 16:26:55 · 229 阅读 · 0 评论 -
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 · 467 阅读 · 0 评论 -
JAVA定时器ScheduledExecutorService中,scheduleAtFixedRate和scheduleWithFixedDelay的区别
我们通过运行代码来查看两者之间的区别:1、首先创建一个需要执行5秒的任务:// 执行这个任务需要5秒Runnable runnable = new Runnable() { public void run() { int i = 5; while (i != 0) { try { Thread.sleep(1000); System.out.print原创 2016-08-03 11:23:34 · 3804 阅读 · 1 评论 -
JAVA的内存结构
1、运行时数据区 JVM所管理的内存包括以下几个运行时数据区域,如图所示 方法区和堆为线程共享区,虚拟机栈、本地方法栈及程序计数器为线程独占区。 程序计数器 程序计数器是一块较小的空间,它可以看作是当前线程所执行的字节码的行号指示器。 如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址(可以理解为上图所...原创 2018-08-01 09:41:28 · 27911 阅读 · 5 评论