[LeetCode][15]3Sum解析与快速排序算法-Java实现 Q:Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must
[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。 不知道大家知不知道设计模式中有一种叫做装饰,举一个简单的例子。一天一个年轻领导小王讲话:咳咳,我们一定要xxx抓紧xxxx学习xxx的精神!好,今天的会议结束!然后有一个老领导李同志接过来说:那个我在补充两点,个别同志xxx,一定要注意xxx。好散会。然后另一天小王同志又在讲话:xxx两手都要抓,xxxx一定要注意。这个时候老周同志出来了:嗯,小王讲的很好,我还有几点要补充xxxx
[LeetCode][14]Longest Common Prefix解析 两种算法和底层源码的深入对比-Java实现 Q:Write a function to find the longest common prefix string amongst an array of strings.A:这题的大概意思就是说给你一组字符串找出其中最长的哪个通用的前缀出来。这个东西不难找,但是如何找的又快又好不简单。其实这题本来就是easy题,但是却让我联想到了《数据结构与算法分析》上的一道题目,那道题目是
[jvm解析系列][十三]字节码指令小节,从字节码看JVM的栈解释器执行过程。 众所周知,JVM以前一直采用的是解释执行,但是后来在历代的版本更迭中也加入了编译执行。所以总的来说JVM是包含了解释执行和编译执行。这一部分不属于JVM的范畴了,已经属于编译了,大多数都是进行词法分析之类的,以后有时间会补充。同时大家都知道现在大体上分为两种指令集架构,第一种就是基于栈的第二种是基于寄存器的,简单点说,基于寄存器的架构速度更快,但是可移植性不强,但是基于栈的指令集架构虽然慢,但
[LeetCode][13]Roman to Integer解析 罗马字符转int类型关于栈的常数实现-Java实现 Q:Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.A:以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言看到这一题我真是感叹城会玩,昨天刚刚解过一个int转罗马字母,今天又反过来解。
[jvm解析系列][十二]分派,重载和重写,查看字节码带你深入了解分派的过程。 重载和重写是分派中的两个重要体现,也是因为这个原因我们才把重载和重写写在了标题上。这一章我们的很多部分都在代码试验上。总的来说分派分为静态分派和动态分派两种。静态分派:首先我们来看一段源码:public class Dispatch { public static void main(String[] args){ Animal a = new Dog();
[LeetCode][12]Integer to Roman解析 int转罗马字符时间复杂度为常数的实现-Java实现 Q:Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.A:俺是真不知道啥是roman,我去查了一下合着是罗马字体,这题目意思也很简单就是说我要输入一个数字可以保证是1~3999但是你要把这个阿拉伯数字转
[jvm解析系列][十一]字节码执行之栈帧,你的字节码是如何运行的? 在之前的章节中我们讲解了jvm的内存分配和管理,class的文件结构,就差之行了。那么从第十一章开始我们就开始讲java虚拟机是如何执行一个class文件的。首先我们应该明确虚拟机是区别于物理机的一种说法,物理机的执行引擎是建立在处理器,硬件 ,指令集之上的。而我们的虚拟机则由自己实现。在虚拟机中大致分为两种执行方式:解释执行和编译执行。我们之前讲过,虚拟机运行方法的时候运行在java虚拟
[LeetCode][11]Container With Most Water解析 时间复杂度为O(n) -Java实现 Q:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i,
[jvm解析系列][十]类加载器和双亲委派模型,你真的了解ClassLoader吗? 上一章我们讲到,一个类加载到内存里我们可以操作的部分只有两个,一个是加载部分一个是static{},我相信static{}不用多讲了。接下来我们就来解析一下ClassLoader即类加载器,他就是用来加载字节码到方法区的类。当年出现ClassLoader这个东西动态加载类的字节码主要还是为了满足JavaApplet的需求。虽然后来JavaApplet挂掉了,但是ClassLoader这个形
[LeetCode][10]Regular Expression Matching解析 -Java实现 Q:Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire
[jvm解析系列][九]类的加载过程和类的初始化。你的类该怎么执行?为什么需要ClassLoader? 通过前面好几章的或详细或不详细的介绍,我们终于把字节码的结构分析的差不多了。现在我们面临这样一个问题,如何运行一个字节码文件呢?首先,java语言不同于其他的编译时需要进行链接工作的语言不通,java语言有一个很明显的特性,那就是动态加载,一个字节码的加载往往都是在程序运行的时候加载进来的,很多时候这种方式给我们带来了便利。虽然从某种意义上来说他可能消耗了一定的资源降低了性能。类的生命周期
[LeetCode][9]Palindrome Number解析与StringBuilder.reverse()源码实现 -Java实现 Q:Determine whether an integer is a palindrome. Do this without extra space.A:这个题目说实话,我是后半句没有看懂的。。。这个without extra space不知道是不是单纯的只是不让用多余空间,如果我理解错了,希望有人能教我一下。。我们之前解过一个回文的题目回文,感觉这题是不是简单了点,上次用的
[jvm解析系列][八]方法表集合,Code属性和Exceptions属性,你的字节码存在哪里了? 根据我们第五章的总构图来看,这一章我们正该讲到方法表集合:大家可能注意到在java中声明一个方法和声明一个变量很相似,public int a = 0;和public int a(){};于是在方法表集合中和字段表集合也很相似。一个方法表的结构应当和下图一样:对比字段表应该发现几乎是一样的。access_flags里的可选项略有不同而已。access_flags:
[jvm解析系列][七]字段表集合、volatile、volatile和属性表集合,你的变量该如何存储? 上段我们说到一个类的基本构成,今天我们来讲一下类的内部结构。类的内部一般情况下由类的成员变量(类字段),方法和内部类等构成。1、字段表:不好意思我们这一次需要先上字段表的内容然后一个一个讲解,不能像前面那样像设计者一样一个一个的推出来了,主要原因还是字段表里包含了属性表。access_flags还记得我们在上一篇里讲的,在类的继承关系之后应该就是field_info他主要描
[LeetCode][8]String to Integer (atoi)解析与模仿Java源码实现 -Java实现 Q:Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible