![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java语言知识点
Angel_Zhl
每天学习一点点,都会觉得自己需要学习的东西有很多,这样才会让自己更想学到新的东西
展开
-
Java GC、新生代、老年代
转载 1、堆内存Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区...转载 2018-09-08 15:07:49 · 330 阅读 · 0 评论 -
java内存划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上...转载 2018-06-10 15:53:27 · 170 阅读 · 0 评论 -
逃逸分析——编译优化技术(最前沿的优化技术之一)
在Java中,典型的对象不再堆上分配的情况有两种:TLAB和栈上分配。一、为什么不在堆上分配 我们知道堆是由所有线程共享的,既然如此那它就是竞争资源,对于竞争资源,必须采取必要的同步,所以当使用new关键字在堆上分配对象时,是需要锁的。既然有锁,就必定存在锁带来的开销,而且由于是对整个堆加锁,相对而言锁的粒度还是比较大的,当对象频繁分配时,不免影响效率。所以对于某些特殊情况,可以采取...转载 2018-04-15 17:09:07 · 831 阅读 · 0 评论 -
JIT编译
JIT 编译过程Java程序最初是仅仅通过解释器解释执行的,即对字节码逐条解释执行,这种方式的执行速度相对会比较慢,尤其当某个方法或代码块运行的特别频繁时,这种方式的执行效率就显得很低。于是后来在虚拟机中引入了JIT编译器(即时编译器),当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会...转载 2018-03-31 17:10:42 · 224 阅读 · 0 评论 -
JAVA 内存泄漏与内存溢出
概念内存泄露:指程序中动态分配内存给一些临时对象,但对象不会被GC回收,它始终占用内存,被分配的对象可达但已无用。即无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间浪费。内存溢出:指程序运行中无法申请到足够的内存而导致的一种错误,内存泄露是内存溢出的一种诱因,但不是唯一因素。Java内存泄露根本原因是什么呢?长生命周期的对象持有短生命周期对象的引用就很可能发生内存...转载 2018-03-31 14:49:07 · 403 阅读 · 1 评论 -
Java的GC总结
如何判断对象已死?常见方法有 引用计数法 和 可达性分析法。引用计数法每一个对象都维护一个引用计数器,当该对象被引用的时候,计数器加1,当失效时,计数器减1,当该对象没有被任何对象引用时,计数器为0,这时候认定为垃圾对象。主流的Java虚拟机没有采用 引用计数法 来管理内存,其主要原因在于它很难解决对象之间相互循环引用的问题。可达性分析法Java...转载 2018-03-23 21:17:01 · 157 阅读 · 0 评论 -
垃圾收集器GC中parallel scavenge收集器为什么不能CMS配合使用?
首先看一下收集器的分布: 1.解答parallel scavenge收集器为什么不能CMS配合使用?首先讲一下Hotspot,HotSpot VM里多个GC有部分共享的代码。有一个分代式GC框架,Serial/Serial Old/ParNew/CMS都在这个框架内;在该框架内的young collector和old collector可以任意搭配使用,所谓的“mix-and-mat...原创 2018-03-23 21:14:14 · 11994 阅读 · 11 评论 -
头条第二批笔试——最大不递减序列的长度
直接上代码好了public class maxLengthNoDownSequence { //题目描述:小名同学观察了一下室内的PM2.5的值,发现PM2.5以小时为周期循环 //即任意时刻的PM2.5的值总是和1小时前相等, // 若在t小时内采样一些点,选取若干采样的数值, // 能否找到一个PM2.5不曾下降的序列,序列长度最大为多少 //输入...原创 2018-09-01 22:39:15 · 235 阅读 · 0 评论 -
简单错误记录——HashMap和LinkedHashMap
最近在刷题的过程中,在使用HashMap进行文件排序遇到的小问题。题目:开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是...原创 2018-04-17 12:59:08 · 762 阅读 · 0 评论 -
算法的时间复杂度O(logN)底数
问题:关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少。解答算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。不过无论底数是什么,log级别的渐进意义是一样的。也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。...转载 2018-03-06 14:45:30 · 833 阅读 · 0 评论 -
git清除缓存命令的运用
git的命令git add <somefile>是把增加的文件添加到缓存中,这些文件可以在.git文件夹的index文件夹中查看。在具体的项目中,可能由于所用的IDE不同,导致有些隐藏文件夹也被上传到远程库中去,例如.idea 文件夹就是IDEA的结果,.out 文件夹就是运行的.class的结果,但这些文件夹别人并不需要,应次需要忽略,即写在.g...原创 2018-03-09 15:54:11 · 1512 阅读 · 0 评论 -
三个线程轮流执行顺序打印ABC,依次是ABCABCABC......(三种方式)
1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o)public class ThreadThreadp { private int flag = 0; public synchronized void printa() throws InterruptedException { while (tru...原创 2018-07-25 16:52:28 · 17553 阅读 · 10 评论 -
volatile和synchronized的区别
可见性(Visibility)可见性就是指当一个线程修改了线程共享变量的值,其它线程能够立即得知这个修改。Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方法来实现可见性的,无论是普通变量还是volatile变量都是如此,普通变量与volatile变量的区别是volatile的特殊规则保证了新值能立即同步到主内存,以及每使用前立即...原创 2018-04-19 22:11:19 · 182 阅读 · 0 评论 -
单播,组播(多播),广播以及任播
定义单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。组播(multicast): 也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略...转载 2018-04-26 20:56:20 · 2580 阅读 · 0 评论 -
关系型数据库和非关系型数据库(MongoDB和redis对比)
1.关系型数据库和非关系型数据库的区别(优缺点,适用环境) 2.博客为什么是mongodb1.关系型代表数据库系统:MySQL, SQL Server, Oracle, 关系型数据库的表是二维表,结构稳定,修改不易。经常需要联表查询。优点: 1.查询能力高,可以操作很复杂的查询 2.一致性高。由于并发高,在数据同步的时候一般采用锁来保证数据的可靠性(还有时间戳什么的方法),在...原创 2018-05-20 22:08:40 · 9672 阅读 · 0 评论 -
Linux命令行调试程序——常用命令
环境:Python3 , TensorFlow 1.3LinuxPuttyWinSCP :文件传输一、运行命令(Putty)1. 运行我们的程序Python3 Train.py这种方法如果退出Putty,或者断开服务器,则程序断开。2. 后台运行并保存运行脚本至nohup.outnohup python3 train.py &amp;amp;在文件中会出现一个nohup...原创 2019-01-24 21:22:51 · 899 阅读 · 0 评论 -
Linux的软链接和硬链接详解
Linux下的链接文件有点类似于Windows的快捷方式,但又不完全一样。链接文件有两种:一种是硬链接,另一种是符号链接(又称软链接)。下面我给大家说说它们两者之间的区别。硬链接:硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则...转载 2018-05-29 09:27:49 · 336 阅读 · 0 评论 -
CPU内存,磁盘,缓存关系?(加深理解)
1. 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。2. 内存包含的范围非常广,一般分为只读存储器(ROM)、随机存储器(RAM)和高速缓存存储器(cache)。3. 寄存器是CPU内部的元件...转载 2018-07-23 15:14:39 · 3993 阅读 · 0 评论 -
Servlet Cookie使用以及客户端请求request
Servlet Cookie 处理Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet 显然支持 HTTP Cookie。 识别返回用户包括三个步骤:服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。浏览器将这些信息存储在本地计算机上,以备将来使用。当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Coo原创 2018-02-01 17:15:32 · 1383 阅读 · 0 评论 -
在写HTML和后端controller传数据时遇到的坑
1.velocity.exception.ParseErrorException: Encountered “”前端错误报错源码:velocity.exception.ParseErrorException: Encountered "" Was expecting one of:"(" ... ... ... ..."##" ..."\\\\" ..."\\" .原创 2018-01-29 15:01:54 · 3738 阅读 · 0 评论 -
Fiddler简单使用——http协议
什么是HTTP协议协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。 HTTP是基于TCP/IP协议的应用层协议,它不涉及数据包(package)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。最早版本是1991年发布的0.9版本,该转载 2018-01-21 15:47:01 · 362 阅读 · 0 评论 -
HTTP协议简介
在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:HTML是一种用来定义网页的文本,会HTML,就可以编写网页;HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。 Elements显示网页的结构,Network显示浏览器和服务器的通信。我们点Network,确保第一个小原创 2018-01-21 15:13:53 · 320 阅读 · 0 评论 -
HTTP状态码(重定向/error 301/302)
1. HTTP状态码当浏览器访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接受并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的英文为HTTP status Code。200 - 请求成功301 - 资源(网页等)被永久转移到其它URL404 - 请求的资源(网页等)不存在 500 - 内部服务器错误2. HTTP状态码分类HTTP状态原创 2018-01-21 12:32:06 · 54965 阅读 · 1 评论 -
java中NaN和Infinity基本数据类型和包装类(double,Double)
java浮点数运算中有两个特殊的情况:NAN、INFINITY。1、INFINITY:在浮点数运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢?我们知道,在整型运算中,除数是不能为0的,否则直接运行异常。但是在浮点数运算中,引入了无限这个概念,我们来看一下Double和Float中的定义。Double:public static final do...原创 2018-09-12 12:15:27 · 3403 阅读 · 0 评论 -
java中Stack的empty() 方法和isEmpty()方法
看Java的API结构中: java.util 类 Stack java.lang.Object java.util.AbstractCollection java.util.AbstractList java.util.Vector java.util.StackStack 继...原创 2018-03-31 16:34:19 · 32976 阅读 · 1 评论 -
JUnit - 使用断言
JUnit - 使用断言断言所有的断言都包含在 Assert 类中 public class Assert extends java.lang.Object这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下: 序号方法和描述1void assertEquals(boolean expected,转载 2018-02-01 17:21:38 · 326 阅读 · 0 评论 -
java 出现unreachable statement异常 原因检查
unreachable statement异常:原因一:java编译器把unreachable statement标记为运行时错误,一个unreachable statement就是编译器决定永远不会执行它。 下面的几种情况会出现 unreachable statement: (1)在reutrn语句后写语句。 (2)在throw语句后原创 2018-02-03 13:42:52 · 124033 阅读 · 15 评论 -
Java技术——String类的intern()方法
0.概要在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。 8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的Stri...转载 2018-03-13 13:16:43 · 274 阅读 · 0 评论 -
java中Arrays类的一些用法
列举Arrays的一些用法,方便以后查找使用。//1.sort排序String[]数组:升序:从小到大String[] names = { "Liz", "John", "Eric", "Alan" };//只排序前两个//[John, Liz, Eric, Alan]Arrays.sort(names, 0, 2);//全部排序//[Alan, Eric, John, Liz]...原创 2018-03-18 11:24:30 · 523 阅读 · 0 评论 -
Java中System.arraycopy, Object.clone, Arrays.copyOf和for 4种数组复制方式的性能比较
用代码说话package InterviewDirectory.binaryTree_example.System.arraycopy_Arrays;import java.util.Arrays;/** * Created by xxx on 2018/3/18. */public class copyOf_clone_for { /** * System.a...原创 2018-03-18 14:06:38 · 2051 阅读 · 0 评论 -
Java Lambda表达式——Java 8 新特性
lambda表达式简介:(本质是一个“语法糖”)Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.ut...原创 2018-03-30 20:54:24 · 242 阅读 · 0 评论 -
一个对象的实例化过程
person p = new person();JVM会读取指定的路径下的person.class文件,并加载进内存。并会先加载person的父类(如果有直接父类的情况下)在堆内存中开辟空间,分配地址并在对象的空间中,对对象的属性进行默认初始化。调用对应的构造函数进行初始化在构造函数中,第一行会先到调用父类中构造函数进行初始化,在子类的构造函数中一定有一个super(),调用父类的...原创 2018-03-30 21:25:00 · 448 阅读 · 1 评论 -
java三大特性之多态(封装,继承,多态)
多态:简单的说,就是一个对象对应着不同类型。所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导...原创 2018-03-30 21:53:15 · 1190 阅读 · 0 评论 -
Java 迭代器Iterator的详解
Iterator接口定义的方法Itreator 该接口是集合的迭代器接口类,定义了常见的迭代方法 1:boolean hasNext() 判断集合中是否有元素,如果有元素可以迭代,就返回true。 2: E next() 返回迭代的下一个元素,注意: 如果...转载 2018-04-03 10:06:50 · 272 阅读 · 0 评论 -
内存划分
寄存器本地方法去方法区栈内存:存储的都是局部变量,而且变量所属的作用域一旦结束,该变量就会自动释放。堆内存:存储的是数组和对象,凡是用new建立在堆中。 特点: 1.每一个实体都有首地址值 2.堆内存中每一个变量都有默认初始化值,根据类型的不同而不同。整数是:0,小数是0.0或者0.0f ,boolean false ,char ‘\u0000’...原创 2018-05-12 10:04:11 · 112 阅读 · 0 评论 -
JAVA NIO 缓冲区buffer实例
缓冲区(Buffer)Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数...转载 2018-08-24 18:07:08 · 287 阅读 · 0 评论 -
java8中的stream
public class ArraysSort { public static void main(String[] args) { //大写转换 String [] wordlist = {"Pdsgdfgdf","jfsdkjfksdfg","sdfusdf"}; List<String> output = Arrays.strea...原创 2018-08-23 16:43:37 · 167 阅读 · 0 评论 -
并发的HashMap为什么会引起死循环?java性能调优
今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有一个原因是:线程不安全的HashMap, HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,查找时会陷入死循环。纠起原因...转载 2018-07-27 21:38:14 · 337 阅读 · 0 评论 -
京东金融一面——数组和链表区别?为什么链表查找慢?数组查找快?为什么连续内存就方便查找?(查找速度快)
面试官怒怼(也是我太紧张,没说清楚,这里总结,其实也要说到CPU的一些东西,平时没注意)数组与链表的优缺点; 数组: 优点:使用方便 ,查询效率 比链表高,内存为一连续的区域 缺点:大小固定,不适合动态存储,不方便动态添加 链表: 优点:可动态添加删除 大小可变 ,内存可能是不连续内存,链式...原创 2018-07-23 14:59:43 · 2387 阅读 · 0 评论 -
java异常类
参考链接异常类体系:在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。 Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。 Er...转载 2018-05-12 11:13:12 · 140 阅读 · 0 评论