- 博客(35)
- 资源 (2)
- 收藏
- 关注

原创 【JVM】Java类加载机制
一、概述虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。二、Java类加载时机(1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果当前类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化
2017-09-10 18:08:44
4922

原创 【JVM】Java内存区域
Java中的运行时内存区域如下图所示一、Java虚拟机栈(在HotSpot虚拟机中 本地方法栈与虚拟机栈合并)Java虚拟机栈是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈,动态链接,方法出口等,总之简单理解就是线程的执行代码内存区域,一个线程一个栈。在Java虚拟机规范中面对这个区域规定了两种异常状况
2017-09-03 22:00:22
4982
原创 记录一下xshell-linux唤起可视化工具过程
yum install xhost xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock libXp libXt libXtstexport DISPLAY=192.168.118.80:0.0xhost +xclock执行以上指令将唤起对应的时钟可视化工具,然后jconsole将可...
2019-11-28 15:24:34
706
原创 【Java并发-深入理解ThreadPoolExecutor】
前言:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,后来学习了ThreadPoolExecutor源码。学习源码的过程中,最恶心的其实就是几种状态的转换了,这也是ThreadPoolExecutor的核心。花了将近小一周才大致的弄明白ThreadPoolExecutor的机制,遂记录下来。一、线程有多重要 线程是一个程序员一定会涉及到的一个概念,但是
2017-11-12 17:21:33
379
原创 【Java-集合】ArrayList的自动扩容
直接上源码,JDK1.8中的ArrayList;//往ArrayList中新增一个元素var1public boolean add(E var1) { this.ensureCapacityInternal(this.size + 1); this.elementData[this.size++] = var1; return true;}//新增元素前确保集合容量足够检
2017-10-22 21:10:08
887
原创 【Java-集合】HashMap-Hash冲突解决
我们常用HashMap作为我们Java开发时的K-V数据存储结构(如id-person,这个ID对应这个人)。我们知道他们的数据结构么,它的Hash值是什么意义。Hash冲突是怎么解决的。我们带着这2个问题将HashMap做个整体剖析。(其实还有一个问题是,它怎么进行动态扩容的)
2017-10-22 20:49:58
10227
1
原创 【JVM】OSGi 灵活的类加载结构
一、OSGi是什么OSGi(Open Service Gateway Initiative),是面向Java的动态模型系统,是Java动态化模块化系统的一系列规范。OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。二、OSGi的结构是怎样的既然OSGi是动态模型系统,那么它的结构
2017-09-24 23:30:30
4187
原创 【JVM】Tomcat的类加载器架构
一、概述主流的java web服务器,如Tomcat、Jetty、webLogic等服务器,都实现了自己定义的类加载器(一般不止一个)。因为一个功能健全的web服务器,就都要解决以下几个问题(1)部署在同一台服务器上的2个web应用程序所使用的java类库可以实现相互隔离,这个是最基本的需求。(2)部署在同一台服务器上的2个web应用程序所使用的java类库可以相互共享,这个需求很常见,如有10个使
2017-09-17 22:01:47
4924
原创 【JVM】Java-JVM-OutOfMemoryError实战
一、主程序代码清单:package sample.mybatis;import java.util.ArrayList;import java.util.List;/** * VM Args : -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * Created by moxianbin on 17/8/27. */public class
2017-08-27 11:49:17
3091
原创 【JVM】Intellij IDEA-Main方法 JVM参数设置
最近在研究深入理解JVM虚拟机这本书,有一章是实战OutOfMemoryError,其中就需要在主程序启动时就设置好VM参数,Intellij IDEA设置主程序的VM参数如下图,【Run】-【Edit Configuration】即会出现下图,然后设置VM options即可
2017-08-27 11:27:00
10796
原创 【JVM】JVM性能监控与故障处理工具
一、概述 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threadDump/javacore文件)、堆转储快照(heapDump/hprof文件)等。介绍JVM性能监控与故障处理工具旨在帮助大家了解如何使用sun公司给我们Java开发者提供的JVM监控工具。 名称 主要作用 jps
2017-08-20 21:49:16
5272
原创 JAVA基础问题集锦
Java虚拟机一、类加载器 (类加载后存储于方法区(类区)) (1)类加载器有哪些 1、根类加载器(Bootstrap) –C++写的 ,看不到源码 2、扩展类加载器(Extension) –加载位置 :jre\lib\ext中 3、系统(应用)类加载器(System\App) –加载位置 :classpath中 4、自定义加载器(必须继承ClassLoader)1、2是JDK相关类加载
2017-08-13 17:01:20
3134
原创 【IO/NIO】Java NIO浅析
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?本文会从传统的阻塞I/O和线程池模型面临的问题讲起,然后对比几种常见I/O模型,一步步分析N
2017-08-06 21:47:48
7853
原创 【IO/NIO】Java IO/NIO
在Java程序中,对于数据的输入/输出以”流”(Stream)方式进行 java.io 包定义了多个流类型: 1) 按数据流方向分为 – 输入流和输出流 2) 按数据单位分为 – 字节流和字符流 3) 按功能分为 – 节点流和处理流所有流类型均位于java.io包内,分别继承以下四种抽象流类型: 字节流 字符流 输入流 InputStre
2017-07-30 21:50:27
3151
1
原创 Java IO: 管道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。你不能利用管道与不同的JVM中的线程通信(不同的进程)。在概念上,Java的管道不同于Unix/Linux系统中的管道。在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。在Java中,通信的双方应该是运行在同一进程中的不同线程。通过Java IO创建管道可以通过Java
2017-07-23 21:45:15
2935
翻译 Java IO 概述
Java IO 概述输入和输出 – 数据源和目标媒介术语“输入”和“输出”有时候会有一点让人疑惑。一个应用程序的输入往往是另外一个应用程序的输出。那么OutputStream流到底是一个输出到目的地的流呢,还是一个产生输出的流?InputStream流到底会不会输出它的数据给读取数据的程序呢?就我个人而言,在第一天学习Java IO的时候我就感觉到了一丝疑惑。(校对注:输入流可以理解为向内存输入,输
2017-07-16 19:57:47
7466
原创 Java中常见数据结构:Java容器 Collection与map -底层如何实现
1:集合 2 Collection(单列集合) 3 List(有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是数组
2017-07-09 16:53:22
5410
原创 Java中的数组与容器的概念与彼此转换
1、数组与容器的基本概念数组是Java提供的线性队列实现方式,能存储基础数据类型与对象;容器是封装的更高级集合实现,底层可能是数组也可能是链表,但容器只能存对象,不能存基础类型。容器间的关系图: 2,List、Set、Map 转换成数组(高级实现转换成基础承载对象的数组)import java.util.*;public class TestCollection{ public st
2017-06-28 22:41:58
5165
原创 google protobuf序列化原理
一、Java数据序列化大致有3种实现方式,1、JSON,2、Object Serialize,3、protobuf,今天重点解析第三种使用google protobuf的序列化原理。Protobuf的简单介绍、使用和分析一、protobuf是什么? protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json
2017-06-25 21:52:01
11011
原创 微服务简介
想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的代码需要知道一个服务实例的网络地址(IP地址和端口)。运行在物理硬件上的传统应用中,服务实例的网络地址是相对静态的,你的代码可以从一个很少更新的配置文件中读取网络地址。在一个现代的,基于云的微服务应用中,这个问题就变得复杂多了,如下图所示: 服务实例的网络地址是动态分配的。而且,由于自动扩展,失败和更新,服务实例的配
2017-06-18 16:06:52
5900
原创 java8-stream
1、Stream初体验 我们先来看看Java里面是怎么定义Stream的:A sequence of elements supporting sequential and parallel aggregate operations.我们来解读一下上面的那句话:Stream是元素的集合,这点让Stream看起来用些类似Iterator; 可以支持顺序和并行的对原Stream进行汇聚的操作; 大家
2017-06-11 10:44:20
3124
原创 工程师文化见解一二
近期公司技术中心在内部发起了工程师文化调研,旨在创造一流的工程师文化氛围,提高团队金融科技能力的强大战斗力文化,随心写了对工程师文化的见解。一、什么是工程师文化什么是工程师文化,以下有几个选项 a.一切以解决问题为导向的工作文化 b.以自我学习驱动,能学习到更多技术与进行技术实践的工作文化 c.以业务为基准,解决业务需求为导向的工作文化a这个选项明显优于其他两个选项,b,c具有一定的偏颇,b太
2017-06-04 10:57:11
1284
原创 Xpath总结
前言:最近在研究scrapy爬虫,缘由是想打造一个自动帮我查找有效房源的爬虫应用,因为需要,又需要研究Xpath,所以就有了这篇博客,Xpath应用总结,用于后面自己查询
2017-05-30 21:03:12
3322
原创 eclipse最有用快捷键整理
编辑 Ctrl+1 快速修复(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等) Ctrl+Shift+F 格式化当前代码 Ctrl+Shift+M 添加类的import导入 Ctrl+Shift+O 组织类的import导入(既有Ctrl+Shift+M的作用,又可以帮你去除没用的导入,很有用) Ctrl+Y 重做(与撤销Ctrl+Z相反)
2016-07-05 17:12:19
2993
原创 快速排序(JAVA描述)
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个
2016-03-30 14:33:21
359
原创 归并排序(Java描述)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。现象:可比较我的其他博客算法的现象 组建数组元素个数:10000000(千万) 组件随机数组运行时间:162 排序运行时间:1472imp
2016-03-30 10:56:16
962
原创 堆排序(Java语言描述)
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。时间复杂度:O(nlogn)现象:可比较我
2016-03-27 23:48:33
1036
原创 希尔排序(Java语言描述)
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序使用一个序列h1,h2….ht,叫做增量序列,当ht=1时,其实就是插入排序了,但在插入排序进行前,就已经进行跨多元素间的(插入排序),而插入排序只能以1的元素间隔进行比较排序。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越
2016-03-27 18:18:53
1023
原创 插入排序(JAVA语言描述)
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法/** * 插入排序 * @author moxianbin */public class Zjinser
2016-03-27 17:01:12
996
原创 springMVC框架整合--(Spring+SpringMVC+hibernate)
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如hibernate,MyBatis等。注解: 扫描指定的
2016-03-27 11:51:26
5244
原创 冒泡排序(JAVA实现)
排序基本思路: 循环数组,当前元素如果比下个元素大,则交换位置。结果:int数组或string数组,将从小到大正序排列/** * 冒泡排序 * @author moxianbin */public class BubbleSort { public static void show(Comparable [] a){ for(int i=0;i<a.length;i+
2016-03-25 16:37:03
3195
原创 斐波那契数列递归与非递归实现(JAVA语言描述)
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在
2016-03-25 14:49:59
16454
原创 Redis 初学
1.下载Redis --windows 64 bit mis【Mac/Linux的直接去官网http://redis.io/download】下载链接:https://github.com/MSOpenTech/redis2.安装,如果下载的是msi,直接安装,然后重启电脑,y因为是安装的没配置环境,Redis会自动启动,右击【我的电脑】-》【管理】-》【服务】3.打开
2016-02-27 10:45:53
3135
原创 正则表达式总结
一、正则表达式基础知识 1.1 句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#
2016-02-26 17:13:00
2978
电信计费系统
2014-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人