---- synchronized,相信学过java的都知道它,但是面试一被问到这个,又总是答不出多少东西来。下面我就将synchronized的知识点列举出来,深入理解(要深入它,才能征服它)。...线程A调用类的同步实例方法,线程B可以同时调用类的同步静态方法吗?为什么? 我们先用代码看结果,再解释为什么。...可以用String字符串来做锁对象吗? 可以,但没必要。代码块的锁对象其实可以是任意对象,不过一般都用class或者this,并不建议用string做锁对象,因为用string很容易造成死锁。...因为JVM中有个常量池,比如你定义两个字符串: String str1 = "haha"; String str2 = "haha"; 这里明明是两个字符串,但其实是同一个对象,因为这样赋值的String...同步方法:执行上述的javap指令查看同步方法,可以发现并没有monitorenter和monitorexit指令,但是在方法开头有个名为ACC_SYNCHRONIZED的flag标识,同步方法就是通过这个标识来控制同步操作的
这个Class对象会包含指向元空间中类元信息的引用。文字还是过于抽象,我画了一张图,你看:图片这里有几个让人混淆的地方,我来为你解释一下:两个Class图中有两处Building.class。...方法区也可以进行垃圾回收。但是,类的完全卸载是一件苛刻的事情,你还记得我在第一篇文章中说的AppClassLoader吗?...当然,如果你想要卸载类,可以用第二篇文章中的自定义类加载器。---文中重要部分解析初始化和未初始化我在前面强调:什么时候会进行类的初始化阶段,什么会只进行加载和链接。知道这两个差异有什么用呢?...直接内存VSJVM内存我在之前为你提到:ByteBuffer.allocateDirect() 方法,它可以使用直接内存。用直接内存有什么好处?...这两种内存的差距就在于堆内存多出了数据从内核缓冲区复制到Java堆内存中的缓冲区步骤。---关于intern()方法我在上面说到,String类型的静态变量会被放到堆的字符串常量池中。
我是不是不小心放成了 Ruby 代码?不,绝对没有。#!指向完整路径的行是由于 OSX brew 问题,如果你在不同的系统上运行它,你将需要不同的系统。#也用于评论。 变量 #!...Tcl 有许多看起来像控制结构的东西,但在某种程度上,它们只是传递包含代码的此类字符串。...{ }没有定义一个块,它只是我们传递的一个字符串。if, else, proc,return而不是关键字 - 它们只是命令。 所以这个糟糕的代码做同样的事情: #!...: 让我们回顾一下: 我们将计数器保存在全局变量中 counter 我们有程序 plus_one 并且 minus_one 递增和递减计数器,因为变量默认是本地的,我们需要明确告诉它global...Tcl/Tk 实际上只是作为一种历史产物感兴趣,而不是作为一种任何人都可能认真用于新软件的语言。 我什至很难说它对其他语言和 GUI 系统有多大影响。
经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发。确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些。...字面量包括字符串(String a=“b”)、基本类型的常量(final 修饰的变量),符号引用则包括类和方法的全限定名(例如 String 这个类,它的全限定名就是 Java/lang/String)...在 JVM 加载完类之后,JVM 会将这个字符串常量放到运行时常量池中,并在解析阶段,指定该字符串对象的索引值。..., JVM 会将其自动优化成字符串常量,引用自同一 String 对象。...如果你有什么想法,欢迎在下方留言。
line 1, 有什么问题?...问题2:这里实际上申请了1024个byte的空间, 如果系统没有这么多空闲空间,有什么问题? 答:直接报错, 这个时候要调查一下是不是存在内存泄漏。...试想一下,如果后面还用aMem访问0x1234会有什么问题? GC的意义 有人可能会说:上面6个问题完全可以避免, 只要我能保证malloc和free用的对就行啦。...这个互相引用产生了环状引用, 引用计数器一致保持在1, Object无法被回收,造成了内存泄漏。可能你会问:不就是一个环,两个Object吗?这一点泄漏不是大问题,谁写代码不泄漏点内存。...(目前一种优化方法就是利用编译器优化技术,减少Reference Counting引入的计数问题,但也无法完全避免)。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。...17、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 18、Hibernate中Session的load和get方法的区别是什么?...使用它又什么风险? 30、Java死锁以及如何避免? 31、String 属于基础的数据类型吗? 32、如何实现对象克隆? 33、Java最顶级的父类是哪个? 34、如何通过反射创建对象?...38、你能写出一个正则表达式来判断一个字符串是否是一个数字吗? 39、运行时栈帧包含哪些结构? 40、什么是Java程序的主类?应用程序和小程序的主类有何不同?...每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么? 57、String str=”i”与 String str=new String(“i”)一样吗?
模块可以在类中引入,这样模块的方法就会成为类的方法。可以使用这个小技巧来实现Ruby的多重继承。 Ruby中的方法(函数) Ruby中的方法区分为实例的方法、类的方法、函数性方法。...String类 字符串,是程序开发中非常常见的一种数据类型。...Ruby中,新建字符串的方式有: 1、直接使用"或者'新建 2、String.new新建 3、使用%Q和%q的方式新建 因为都是继承自Object类,所以和Array一样,...正则表达式是为了进行较为复杂的字符串匹配而出现的。 Ruby中,创建正则表达式对象有几种方法://、Regexp.new()、%r等。 Ruby中正则表达式的元字符与其他语言中的正则表达式保持一致。...String类提供了sub、gsub、scan三个方法可以接收正则表达式对象。 IO类 IO是每个程序语言必不可少的部分,通常IO有三个,标准输入、标准输出、错误输出。
第一部分: Java基础(此部分面试题题目来自:http://www.hollischuang.com/archives/10 答案是搜集与互联网) (为了方便,我把他们分了类,有一些是必看的,我用!...标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。) 一:继承、抽象类与接口区别、访问控制(private, public, protected,默认)、多态相关!...类中使用字符数组保存字符串,因为有final修饰,所以string是不可变的。...JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,...GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路? 6. GC收集器有哪些?CMS收集器与G1收集器的特点。 7.
它有什么特性? (1)实现js文件的异步加载,避免网页失去响应; (2)管理模块之间的依赖性,便于代码的编写和维护。 65、谈一下JS中的递归函数,并且用递归简单实现阶乘?...jQuery主要用于pc端,当然有对应的jQuerymobile用于移动端,zepto比jQuery更加小巧,主要用于移动端 5、针对 jQuery 的优化方法?...移动端的点击事件的有延迟,时间是多久,为什么会有?怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)...你有了解我们公司吗?说说你的认识? 因为我想去阿里,所以我针对阿里的说 最羡慕就是在双十一购物节,350.19亿元,每分钟支付79万笔。海量数据,居然无一漏单、无一故障。太厉害了。 17....融入自己的设计理念,注重用户体验,选择合适的技术 18. 你所知道的页面性能优化方法有那些? 压缩、合并,减少请求,代码层析优化。。。 19. 除了前端以外还了解什么其它技术么?
关键点就在于,那个Java类的字段要和CSV的表头的列名做对应,CSV变化了,Java类的字段以及解析的方法都要做相应得修改才可以。...此外还有数据类型的问题。) 在小区对面的田老师红烧肉吃了一份盖饭以后,张大胖立刻投入到程序的编写中来,一边写一边想:我这是用程序来生成程序啊!...可是Bill很快给它泼了一盆冷水:“不过这种用模板生成的方式还是有些‘低级’,每次CSV文件有变化,都需要运行一下代码生成器才可以。” “那怎么办?”...” 张大胖看过虚拟机的书,知道有很多字节码,但是操作它们形成符合要求的类,实在是难以想象。 Bill 笑道:“你可以用动态语言,比如Ruby,元编程很强大,实现你这个功能简直是小菜一碟。”...张大胖说道:“嗯, 这Ruby的元编程能力很强大啊,可惜的是,我们的项目都是Java的,这动态的脚本语言Ruby没法直接使用,如果是微服务,对外提供的是HTTP的API,我可以学学Ruby,单独写个Ruby
二、多次执行的循环体 使用热点探测来检测是否为热点代码,热点探测有两种方式: 采样 计数器 目前HotSpot使用的是计数器的方式,它为每个方法准备了两类计数器: 方法调用计数器(Invocation...("2");混合一起用的时候 我发现,我还是太年轻了。...但在我学习的途中,我已经发现了有很好的文章去讲解垃圾回收的了。...6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?...2.6类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。
: can't modify frozen string (TypeError) 想起今天孟岩写的:Ruby之symbol研究 ,的确字符串的处理上ruby有很多特色。 3....为什么可以节省内存?Ruby中的String是可变对象,这一点跟Java、C#、Python都不一样。注意跟某些C++标准库中的COW的 basic_string也不一样。...Ruby中每一个String都可以就地改变。可能是因为这个原因,Ruby中两个内容相同的字符 串文本量实际上是两个不同的对象。 ...,"ruby"这个字符串动态生成了三次,占用三倍内存。...在看参考手册的时候才发现 ruby 的 string 有 freeze 方法 ,却没有提供 unfreeze 。
学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 ?...二、多次执行的循环体 使用热点探测来检测是否为热点代码,热点探测有两种方式: 采样 计数器 目前HotSpot使用的是计数器的方式,它为每个方法准备了两类计数器: 方法调用计数器(Invocation...但在我学习的途中,我已经发现了有很好的文章去讲解垃圾回收的了。...6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?...2.6类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。
70、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。 71、如何用 Java 代码列出一个目录下所有的文件?...64、Java 中,Comparator 与 Comparable 有什么不同? 66、在我 Java 程序中,我有三个 socket,我需要多少个线程来处理?...我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。...String str = new String("hello"); 上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而”hello”这个字面量是放在方法区的。...补充:我们为编写的类重写 hashCode 方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数?
比如我有一条 instanceof 指令,在编译之前的执行过程中,测试对象的类一直是同一个,那么即时编译器可以假设编译之后的执行过程中还会是这一个类,并且根据这个类直接返回 instanceof 的结果...今天我要讲的重点是JVM 运行时的优化,在通常情况下,编译器和解释器是共同起作用的,具体流程可以参考下面的示意图 JVM 会根据统计信息,动态决定什么方法被编译,什么方法解释执行,即使是已经编译过的代码...锁优化 Intrinsic 机制,或者叫作内建方法,就是针对特别重要的基础方法,JDK 团队直接提供定制的实现,利用汇编或者编译器的中间表达方式编写,然后 JVM 会直接在运行时进行替换。...这么做的理由有很多,例如,不同体系结构的 CPU 在指令等层面存在着差异,定制才能充分发挥出硬件的能力。我们日常使用的典型字符串操作、数组拷贝等基础方法,Hotspot 都提供了内建实现。...第二,有哪些手段可以探查这些优化的具体发生情况呢? 专栏中已经陆陆续续介绍了一些,我来简单总结一下并补充部分细节。 打印编译发生的细节。 输出更多编译的细节。
学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 ?...二、多次执行的循环体 使用热点探测来检测是否为热点代码,热点探测有两种方式: 采样 计数器 目前HotSpot使用的是计数器的方式,它为每个方法准备了两类计数器: 方法调用计数器(Invocation ...但在我学习的途中,我已经发现了有很好的文章去讲解垃圾回收的了。...6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?...2.6类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。
字符串是恒定的,一旦创建出来就不会被修改,怎么理解这句话?我们可以看下 String 源码的声明 ? 告诉我你看到了什么?...我们先把答案贴出来,以防心急的同学想急于看到结果,他们的答案是 false true true false 和你预想的一样吗?为什么会这样呢?我们先来看一下 intern 方法的官方解释 ?...本地方法栈: 本地方法栈也是线程私有的数据区,本地方法栈存储的区域主要是 Java 中使用 native 关键字修饰的方法所存储的区域 程序计数器:程序计数器也是线程私有的数据区,这部分区域用于存储线程的指令地址...a 不会变,因为常量池中已经有了 ab ,所以 c 不会再创建一个 ab 字符串,这是编译器做的优化,为了提高效率。...String 首先来看一下 String 类在继承树的什么位置、实现了什么接口、父类是谁,这是源码分析的几大重要因素。
就像:我正在用Rust语言编写一个Ruby分析器,它只通过访问其PID、内存映射以及从进程读取内存的能力,可以从任意Ruby程序中提取Ruby堆栈跟踪。它已经可以工作了!...和 关于Rust的方法一直是围绕折衷徘徊,正如在这个博客上讨论的各块所体现的那样: 喜欢这种方法(“要使它更容易使用,而不会牺牲可靠性或性能”),他们真的已经交付了。 但!...但编译器并没有告知如何解决这个问题,也没有给出任何有关做什么的明确线索。 但!!!...可以在程序里用.clone()搜索每个地方 ,并对它们进行审计—这个函数是否被调用了很多次?应该担心吗?刚刚查过程序中使用clone()的每一个地方,在程序开始的时候,只调用一次或两次。...大部分Firefox都是用Rust编写的,Rust大大提高了Firefox的性能。 Rust是为C / C ++专家而设的,他们希望有更好的关于未定义行为的编译时间保证。
这里我们用的是几乎,技术发展至今,其实并非所有的对象实例都会分配到堆上,比如逃逸技术,这个我们后续文章我再做解释~ 堆是垃圾收集器管理的内存区域,因此一些资料中它也被称作 “GC 堆”(Garbage...下面我来结合我的理解给大家解释下,我觉得这个 “方法区是堆的一个逻辑部分” 应该适用于 JDK 8 以前,而不适用 JDK 8 先来看 JDK 8 之前: 可以看到,JDK 8 之前,堆和方法区其实是连在一起的...有一些文章会把 class 常量池表称为静态常量池。 都是常量池,常量池表和运行时常量池有啥关系吗?运行时常量池是干嘛的呢?...以字符串常量池为例,字符串 String 既然作为 Java 中的一个类,那么它和其他的对象分配一样,需要耗费高昂的时间与空间代价,作为最基础最常用的数据类型,大量频繁的创建字符串,将会极大程度的影响程序的性能...为此,JVM 为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化: 为字符串开辟了一个字符串常量池 String Pool,可以理解为缓存区 创建字符串常量时,首先检查字符串常量池中是否存在该字符串
实际上,并不是说-3 非得是一个对象,但是有的编译器可认可这件事情,比如 Ruby。如果你有一堆参数的话,不妨选择一个对方法影响最大的参数来做这个方法的调用者。...但是,还是那句话,我可以给 String 类定义一个方法,方法调用变成了这样:“my_workspace”.toCamelCase()。...当然了,在 Java 里面我们无法随意扩展 String 这个类,但是很多面向对象的语言是允许我们做到这一点的。...我觉得这个方法应该放在类似于一个 “Cache” 的类里面。...我现在一见到这样的标志量,我就知道,这里可以用多态的方式来优化: class User { String user; String password; Cookie login
领取专属 10元无门槛券
手把手带您无忧上云