Mark

面试官:你对JVM垃圾收集器了解吗?13连问你是否抗的住!

≡放荡痞女 提交于 2020-07-24 18:30:57
关于JVM垃圾收集器的面试题 1、简述Java垃圾回收机制 2、GC是什么?为什么要GC 3、垃圾回收的优点和原理。并考虑2种回收机制 4、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 5、Java 中都有哪些引用类型? 6、怎么判断对象是否可以被回收? 7、在Java中,对象什么时候可以被垃圾回收 8、JVM中的永久代中会发生垃圾回收吗 9、说一下 JVM 有哪些垃圾回收算法? 10、说一下 JVM 有哪些垃圾回收器? 11、详细介绍一下 CMS 垃圾回收器? 12、新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别? 13、简述分代垃圾回收器是怎么工作的? 1、简述Java垃圾回收机制 在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。 2、GC是什么?为什么要GC GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存 回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动

NULL Pointer 3th Web Challenge Writeup -- The latest version of DZ3.4 penetration

梦想的初衷 提交于 2020-07-24 18:24:03
Author:LoRexxar@Knownsec 404 Team Time: May 11, 2020 Chinese version: https://paper.seebug.org/1197/ I took a look at the third Web Open of the null pointer this weekend, and after a little research, I found that this is the latest version of the DZ3.4 environment with almost default configuration. We need to pwn it in such a DZ under almost real environment. This moment raised my interest, and then we will sort out the penetration process together. The difference from the default environment is that we have two additional conditions. 1. The backend of the web environment is Windows; 2. We get

阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧

 ̄綄美尐妖づ 提交于 2020-07-24 00:39:58
内存分配机制 逐步分析 类加载检查: 虚拟机遇到一条new指令(new关键字、对象的克隆、对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被加载过,如果没有那么就去加载该类 分配内存 类加载完毕后会给对象分配内存空间。对象的所需的内存大小在类加载完毕后就便可完全确认,为对象分配内存大小的空间等同于把一块确定大小的内存从java堆中划分出来。 如何划分内存? 指针碰撞(默认使用指针碰撞):如果java堆内存是绝对规整的,那么会把所有用过的内存放在一边,空闲的内存放在另外一边,中间用一个指针来作为分界点的指示器,那所分配的内存仅仅把那个指针空闲空间的挪动一段与对象大小相同的距离。 空闲列表:如果java堆内存不是绝对规整的,已使用的空间和未使用的空间互相交错,那么虚拟机维护一份列表,记录哪些内存块是可用的,在划分内存空间的时候从列表中找到一块足够大的内存空间分配给对象实例,并更新列表上的记录。 分配内存遇到高并发的问题?现在有多个线程同时并发需要进行内存分配 CAS :虚拟机采用失败重试的机制方式保证操作的原子性对分配内存空间的动作进行同步处理,第一个线程抢占到了分配空间,第二个线程没有抢占到就重试抢占后面一块内存空间 本地线程分配缓冲:把内存分配的动作按照线程分配在不同的空间之中完成

Java中各种锁的详细解读

自闭症网瘾萝莉.ら 提交于 2020-05-09 20:28:42
在没有实际接触和详细了解Java的各种锁之前,可能觉得Java 中的各种锁,会很多很复杂,不是的,看一遍不行,再看一遍,就差不多了,还是比较好理解的。虽然距离实际使用还是有点距离,但是,要跨出第一步,了解之后,再考虑如何使用和高级使用。 这个图画的也很好 1. 乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。 先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。 Java中,synchronized关键字和Lock的实现类都是悲观锁 。 而乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重试)。 乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过CAS自旋实现的。 (图还是很值得一看滴) 根据从上面的概念描述我们可以发现: 悲观锁适合写操作多的场景,先加锁可以保证写操作时数据正确。 乐观锁适合读操作多的场景

edherefromagesnineto18mark

自闭症网瘾萝莉.ら 提交于 2020-05-09 08:19:56
腾讯科技讯 5 月 8 日消息,猫眼娱乐首席运营官康利今日在朋友圈宣布将离职猫眼。   康利发文称,今年是他在猫眼的第 8 年,在完成交接,确保平稳过渡后,他将离开猫眼,换一个方式继续他的人生创业。此外,康利还在文中对美团、光线、腾讯等猫眼股东及其高管表达了感谢。   官方资料显示,康利拥有超过 10 年运营管理经验,2013 年 3 月-2016 年 4 月担任美团网高级运营总监;2016 年 4 月,猫眼从美团拆分独立,随后康利出任 COO 至今,负责集团的整体管理。   猫眼公司回应说,康利因个人发展需求,将辞去猫眼娱乐 COO 职务,转为担任公司顾问,继续陪伴猫眼成长。康利自 2013 年加入公司以来,为猫眼的发展与成长做出了巨大贡献,公司高度肯定和感谢康利为公司的发展做出的努力。猫眼也将支持和祝福康利个人乘风破浪,追求进一步发展。mnmqw http://focusky.com/homepage/okpdr/ http://focusky.com/homepage/ffuvv/ http://focusky.com/homepage/dgaqd/ http://focusky.com/homepage/lztno/ http://focusky.com/homepage/hkano/ http://focusky.com/homepage/ruwap/ http:/

去除 UTF-8 文件 BOM 头

回眸只為那壹抹淺笑 提交于 2020-05-08 23:42:46
什么是 BOM? BOM 全称是 Byte Order Mark(字节顺序标记)。出现在文本文件头部,Unicode 编码标准中用于标识文件是采用哪种格式的编码。比如:当用记事本保存一个以 UTF-8 编码的文件时,会自动在文件开始自动插入三个不可见字符“0xEF 0xBB 0xBF”,但是通常情况下不需要这个头部来识别文件的编码,在PHP代码中存在BOM,会导致网页的首行存在预料外的间隙。 去除 BOM 方法 【方法一】打开 vim 键入 :set bomb ,回车,显示 bomb 表示文件有 BOM,nobom 表示文件无 BOM; 键入 :set nobomb ,并回车。 【方法二】打开 notepad++ 依次点击菜单栏【格式】-【以 UTF-8 无 BOM 格式编码】,并保存。 【方法三】sed 命令 utf-8 编码文件的 BOM 是 “0xEF 0xBB 0xBF”(更多 BOM 请 点击 ),针对 utf-8 编码文件去掉 BOM: // 生成新文件 sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt 或 // 直接覆盖老文件 sed -i '1s/^\xEF\xBB\xBF//' orig.txt 参考链接: How can I remove the BOM from a UTF-8 file?( https://unix

utf-8编码的csv文件 Excel 打开乱码 输出前加 0xEF,0xBB,0xBF 三个char

爷,独闯天下 提交于 2020-05-08 21:19:43
是由于输出的CSV文件中没有BOM. BOM是Byte Order Mark(定义字节顺序),因为在网络传输中分两种顺序:大头和小头。 其实是UTF-8文件的Unicode签名BOM(Byte Order Mark) 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。 而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。 UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。 这样接受者如果收到FEFF,就表明这个字节流是Big-Endian的;      如果收到FFFE,就表明这个字节流是Little- Endian的。 因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。 UTF-8不需要BOM来 表明字节顺序,但可以用BOM来 表明编码方式。 字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。 所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件的编码方式的。 在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。 这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF

Java 多线程-synchronized用法

柔情痞子 提交于 2020-05-08 18:31:20
造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。 当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态,直到当前线程处理完毕释放该锁。在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到synchronized另外一个重要的作用,synchronized可保证一个线程的变化(主要是共享数据的变化)被其他线程所看到(保证可见性,完全可以替代Volatile功能),这点确实也是很重要的。 synchronized的三种应用方式 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。 synchronized作用于实例方法 所谓的实例对象锁就是用synchronized修饰实例对象中的实例方法,注意是实例方法不包括静态方法,如下

【国际】交易所订单类型

让人想犯罪 __ 提交于 2020-05-08 16:29:30
前言 随着交易的频繁度和金额,参与交易人的各种多样化,简单的限价和市价交易明显已经不太满足用户需求了,今天就探讨一下交易订单类型 实例 先说说今天有些什么内容: import java.util.Arrays; import java.util.Optional; /*** * Order type collection * @author kinbug */ public enum OrderType { GTC(0), // Good till Cancel - 正常的限价单 GTD(1), // Good till Date - 交易者指定交易日之前有效,之后撤销 IOC(2), // Immediate or Cancel - 立即成交否则取消指令 FAK(3), // Fill and Kill - 指定价位成交,剩余自动撤销 FOK(4), // Fill or Kill - 指定价位全部成交,否则自动撤销 MTM(5), // Mark to market - 市价转限价 MPO(6), // Market protection Order - 市价保护单,成交到设置的保护价位置,未成交部分转为临界值得限价单。 LCE(7), // lceberg order - 冰山单 SLO(8), // stop limit order - 止损限价单 SWP(9); //

极客时间-左耳听风-程序员攻略-理论学科

安稳与你 提交于 2020-05-08 09:30:33
程序员练级攻略:理论学科 数据结构与算法 无论是做业务还是做底层系统,经常需要使用算法处理各种各样的问题。 基础知识 :《 算法 》,是算法领域经典的参考书,不但全面介绍了关于算法和数据结构的必备知识,还给出了每位程序员应知应会的 50 个算法,并提供了实际代码。最不错的是,其深入浅出的算法介绍,让一些比较难的算法也变得容易理解,尤其是书中对红黑树的讲解非常精彩。其中,还有大量的图解,详尽的代码和讲解,也许是最好的数据结构入门图书。不好的是不深,缺乏进一步的算法设计内容,甚至连动态规划都未提及。 算法书比较枯燥的话,你可以看看这本有趣的《 算法图解 》。 理论加持 :偏于理论方面的书——《 算法导论 》。 思维改善 :《 编程珠玑 》来引导读者理解并学会解决这些问题的方法。 算法训练: LeetCode ,两类算法题 基础算法题 。其中有大量的算法题,解这些题都是有套路的,不是用递归(深度优先 DFS、广度优先 BFS),就是要用动态规划(Dynamic Programming),或是折半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),还有大量的对树、数组、链表、字符串和 hash 表的操作。通过做这些题能让你对这些最基础的算法的思路有非常扎实的了解和训练。 编程题 。比如:atoi、strstr、add