• 我曾在多个场合撰文说过,现在培训出来的企业Java开发兵团只知道使用某种框架,但完全不知道这些框架的底层原理。今天早上,在依次对三个职位的应聘者面试中,我又再次见到了这种情形。  我们的顾问公司收到了一...

    我曾在多个场合撰文说过,现在培训出来的企业Java开发兵团只知道使用某种框架,但完全不知道这些框架的底层原理。今天早上,在依次对三个职位的应聘者面试中,我又再次见到了这种情形。

      我们的顾问公司收到了一个客户的招聘需求,要一个经验丰富并通晓SQL的Java开发人员。我们公司在这个客户那里享有非常好的声誉,于是我们从招聘代理公司要来了一批简历,开始搜寻合适的目标。

      首先,关于他们的简历——每份简历都有数页,详细的描述了在各个公司干过的各种工作。每份简历上都有一个技术列表,表面上看这些都是应聘者懂得的技术。下面这个清单是一个真实的简历上记载的各种技术:

      Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web

      Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse,

      Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML,

      CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL,

      Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web

      logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.

      相当的让人印象深刻…——对于那些从来没有面试过Java程序员的人来说。我并不想说这些应聘者在撒谎,只是这些人跟你的谈话坚持不到三分钟就会在80%的这些技术上露馅。他们可能听说过或者是试过这些技术或工具,这对于他们来说已经足够可以把它们列入简历了。那剩余的他们能说清楚的20%是什么?框架。基本上他们都会向你解释如何配置Struts或Spring,甚至如何让Spring和Hibernate通信。顺便说一句,他们全都喜欢Hibernate,因为它能让你省去了写SQL,而他们对SQL查询语言的知识知之甚少。

      每当我看到简历上写满了这些Struts,Springs,Hibernates等东西,我就会这样问,“假设,你不允许使用任何框架。你要从数据库中的客户表和订单表中取出数据,把它们放到Web页面上,请详细完整的解释一下这整个过程。”对大部分人来说,让他们写出一些纯SQL将是一种致命请求…

      有个人在简历上写了JQuery。我问她,“你为什么要用JQuery”…20秒钟的停顿…“我喜欢它,它很好呀!”这就是所有我能从她那挖掘出的关于JQuery的信息。

      两周前,我参加了一个旧金山JavaOne大会里的一个技术主题会。Brian Goetz向我展示了一些Lambda表达式(也就是闭包)的样例代码,这个东西将在明年的Java8中出现。这是一个相当高级的语言特征,它所用的Java语法是给有勇气的人准备的。我在想,“在企业Java世界,谁会去用闭包?10%的程序员?5%?”。Java中引入这些表达式只是好玩?只因为它很酷?是因为其它函数式语言中有它?


      软件开发产业正在发生变化。它将不再需要更多的程序员。它需要的是高级匠师,能够在软件出问题时配置并替换相关代码。理想情况下,你的团队中应该有一个Java高手,他能真正理解你们应用中的代码,不仅能够从模块级调整它们,并且能理解每行Java代码。这样的人多少也该知道如何写SQL外连接,知道如何纠正编译问题,等等。

      典型的企业经理都希望手下拥有更多的软件开发人员。多管一些人是向上晋升的一种捷径。是这么回事。但如果你足够聪明,你应该确保你那一堆框架程序员中至少有一个是货真价实的。

      我又收到了一份简历,将在明天早上10点面试。这简历看起来很眼熟。我只看了它工作过得公司和干的项目。上面其它的信息都是没用的——明天早上10点钟他自然会现出原形。

      明天的更新。现在是早上10点15。又一个面试结束了。第四个错误的回答是,要想把数据传送到浏览器,一个servlet需要把数据放到HTTPSession对象属性里。在听了10分钟这样的回答后,你会认为我终止这次面试的行为很粗鲁吗?

      明天的明天的更新。我给这个职位每小时的报酬上增加了5美元。偏偏这第一个面试者就扛着胜利的大旗通过了我的面试。别以为这区区5美元就能叩开栖息着有才能的程序员的奇异世界的大门!

    展开全文
  • 接触Java也快半年时间了,但是对Java底层原理还不是非常清楚,最近在看《Java虚拟机(第二版)》,深有启发,顺便把Java知识梳理一下,以便更好的进行接下来的学习Java技术体系划分(按照所服务的平台划分...

    接触Java也快半年时间了,但是对Java的底层原理还不是非常清楚,最近在看《Java虚拟机(第二版)》,深有启发,顺便把Java知识梳理一下,以便更好的进行接下来的学习。


    Java技术体系划分(按照所服务的平台划分):


    1. Java Card: 支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
    2. Java ME(Micro Edition) :支持Java程序运行在移动终端(手机,平板)上的平台,对Java API有所精简,并加入了对移动端的支持,原来叫J2ME。
    3. Java SE(Standard Editon ):支持面向桌面级的应用(如Windows下)的Java平台,提供了完整的Java核心API ,原来叫J2SE。
    4. Java EE(Enterprise Edition):支持多层架构的企业应用(如ERP,CRM应用)的Java平台,除了提供JavaSE平台,还对其做了大量补充并提供了部署支持,原来叫J2EE。


    Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class 文件按照需求和一定的规则加载进内存,并组织成为一个完整的 Java 应用程序。
     
    javac 是对 .java 文件进行编译 ,生成一个.class文件,具体为(有兴趣的读者可以参见 Java编译原理
    • 分析和输入到符号表
    • 注解处理
    • 语义分析和生成class文件
    .class文件为JVM字节码

    java 是 运行 .class 文件  ,是调用JVM虚拟机执行引擎,JVM是基于栈的体系结构来执行class字节码的。

    展开全文
  • Java底层学习

    2019-06-26 17:20:03
    最近在看几本Java的书,也做了很多笔记,主要是关于Java虚拟机、Java GC、Java 并发编程等方面,参考的主要几本书籍有: 《深入理解Java虚拟机》——周志明 《深入理解Java虚拟机 第二版》——美 Bill Venners ...

    最近在看几本Java的书,也做了很多笔记,主要是关于Java虚拟机、Java GC、Java 并发编程等方面,参考的主要几本书籍有:

    《深入理解Java虚拟机》——周志明

    《深入理解Java虚拟机 第二版》——美 Bill Venners

    《Java性能调优指南》——也是老美的

    《Java高并发程序设计》——葛一鸣

    本来想自己把这些书的pdf传上来的,可惜已经有人上传了,大家自己去找资源吧

    当然在写作过程中也参考了很多大神的文章,下面给几个链接,大家也可以看看:

    【Java成神之路】—-死磕Java系列博客

    《成神之路系列文章》

    JVM调优总结

    等全部写完,我就写个目录方便大家查看,顺便给出一个在网络课程中看到的图:

     

    根据图中所示,我想大家也会对日后的学习应该有所思路

     

     

     

     

    展开全文
  • java底层学习

    2018-03-12 20:43:26
    底层要学习什么啊,总结一下大牛们的经验,给自己定个路线,记录关于一些技术方面需要学习的东西:还有一些面试题:1、开发中Java用了比较多的数据结构有哪些? 2谈谈你对HashMap的理解,底层原理的基本实现,...

    底层要学习什么啊,总结一下大牛们的经验,给自己定个路线,记录关于一些技术方面需要学习的东西:




    还有一些面试题:


    1、开发中Java用了比较多的数据结构有哪些?
    
    2谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?
    
    这些数据结构中是线程安全的吗?假如你回答HashMap是线程安全的,接着问你有没有线程安全的map,接下来问了conurren包。
    
    3、对JVM熟不熟悉?简单说说类加载过程,里面执行的哪些操作?问了GC和内存管理,平时在tomect里面有没有进行过相关的配置
    
    4、然后问了http协议,get和post的基本区别,接着tcp/ip协议,三次握手,窗口滑动机制。
    
    5、开发中用了那些数据库?回答mysql,储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
    
    1、Dubbo超时重试;Dubbo超时时间设置
    
    2、如何保障请求执行顺序
    
    3、分布式事物与分布式锁(扣款不要出现负数)
    
    4、分布式session设置
    
    5、执行某操作,前50次成功,第51次失败a全部回滚b前50次提交第51次抛异常,ab场景分别如何设置Spring(传播性)
    
    6、Zookeeper有哪些用
    
    7、JVM内存模型
    
    8、数据库垂直和水平拆分
    
    9、MyBatis如何分页;如何设置缓存;MySQL分页
    
    10、熟悉IO么?与NIO的区别,阻塞与非阻塞的区别
    
    11、分布式session一致性
    
    12、分布式接口的幂等性设计「不能重复扣款」

    1、最近做的比较熟悉的项目是哪个?画一下项目技术架构图
    
    2、JVM老年代和新生代的比例?
    
    3、YGC和FGC发生的具体场景
    
    4、jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?
    
    5、线程池的构造类的方法的5个参数的具体意义?
    
    6、单机上一个线程池正在处理服务如果忽然断电该怎么办?(正在处理和阻塞队列里的请求怎么处理)?
    
    7、使用无界阻塞队列会出现什么问题?
    
    8、接口如何处理重复请求?
    
    9、具体处理方案是什么?
    
    10、如何保证共享变量修改时的原子性?
    
    11、设计一个对外服务的接口实现类,在1,2,3这三个主机(对应不同IP)上实现负载均衡和顺序轮询机制(考虑并发)

    1、自我介绍,技术特点
    
    2、兴趣是什么,优势是什么
    
    3、jvm,jre以及jdk三者之间的关系?
    
    4、Dubbo的底层原理,Zookeeper是什么
    
    5、cincurrentMap的机制;TreeMap;Volatil关键字
    
    6、快速排序;广度优先搜索(队列实现)
    
    7、缓存的雪崩以及穿透的理解?
    
    8、HashMap的key可以重复吗?
    
    9、synchronized和lock的区别?
    
    10.开发一个大型网站你会考虑哪些问题?

    这就是目标公司咯~~~~~~~~~~学习吧~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    展开全文
  • Java 多态的底层原理

    2018-08-23 19:32:02
    Java 多态的底层原理 Java后端开发者 公众号 :程序之心(ID:chengxuzhixin) ​关注他 4 人赞了该文章 作为一门面向对象语言,Java 拥有封装、继承、多态三大特性。多态就是允许不同类的对象对同一消息做出...

    Java 多态的底层原理

    Java后端开发者

    Java后端开发者

    公众号 :程序之心(ID:chengxuzhixin)

    ​关注他

    4 人赞了该文章

    作为一门面向对象语言,Java 拥有封装、继承、多态三大特性。多态就是允许不同类的对象对同一消息做出响应。基于多态,可以消除一些类型耦合关系,实现可替换、可扩充。Java 中使用多态特性的方法主要有,实现一个接口,实现抽象类的一个方法,覆盖父类的一个方法。

    多态的底层实现是动态绑定,即在运行时才把方法调用与方法实现关联起来。动态绑定涉及很多 JVM 的细节,全部写清楚需要很大篇幅,因此本文仅简单描述,后续会有其他文章就其中的细节一一分享。

     

    静态绑定与动态绑定

    JVM 的方法调用指令有五个,分别是:

    invokestatic:调用静态方法;

    invokespecial:调用实例构造器<init>方法、私有方法和父类方法;

    invokevirtual:调用虚方法;

    invokeinterface:调用接口方法,运行时确定具体实现;

    invokedynamic:运行时动态解析所引用的方法,然后再执行,用于支持动态类型语言。

    其中,invokestatic 和 invokespecial 用于静态绑定,invokevirtual 和 invokeinterface 用于动态绑定。可以看出,动态绑定主要应用于虚方法和接口方法。

    静态绑定在编译期就已经确定,这是因为静态方法、构造器方法、私有方法和父类方法可以唯一确定。这些方法的符号引用在类加载的解析阶段就会解析成直接引用。因此这些方法也被称为非虚方法,与之相对的便是虚方法。

    虚方法的方法调用与方法实现的关联(也就是分派)有两种,一种是在编译期确定,被称为静态分派,比如方法的重载;一种是在运行时确定,被称为动态分派,比如方法的覆盖。对象方法基本上都是虚方法。

    这里需要特别说明的是,final 方法由于不能被覆盖,可以唯一确定,因此 Java 语言规范规定 final 方法属于非虚方法,但仍然使用 invokevirtual 指令调用。静态绑定、动态绑定的概念和虚方法、非虚方法的概念是两个不同的概念。

     

    多态的实现

    在前文《Java线程知识拾遗》中提到过,虚拟机栈中会存放当前方法调用的栈帧,在栈帧中,存储着局部变量表、操作栈、动态连接 、返回地址和其他附加信息。多态的实现过程,就是方法调用动态分派的过程,通过栈帧的信息去找到被调用方法的具体实现,然后使用这个具体实现的直接引用完成方法调用。

    以 invokevirtual 指令为例,在执行时,大致可以分为以下几步:

    1. 先从操作栈中找到对象的实际类型 class;
    2. 找到 class 中与被调用方法签名相同的方法,如果有访问权限就返回这个方法的直接引用,如果没有访问权限就报错 java.lang.IllegalAccessError ;
    3. 如果第 2 步找不到相符的方法,就去搜索 class 的父类,按照继承关系自下而上依次执行第 2 步的操作;
    4. 如果第 3 步找不到相符的方法,就报错 java.lang.AbstractMethodError ;

    可以看到,如果子类覆盖了父类的方法,则在多态调用中,动态绑定过程会首先确定实际类型是子类,从而先搜索到子类中的方法。这个过程便是方法覆盖的本质。

    实际上,商用虚拟机为了保证性能,通常会使用虚方法表和接口方法表,而不是每次都执行一遍上面的步骤。以虚方法表为例,虚方法表在类加载的解析阶段填充完成,其中存储了所有方法的直接引用。也就是说,动态分派在填充虚方法表的时候就已经完成了。

    在子类的虚方法表中,如果子类覆盖了父类的某个方法,则这个方法的直接引用指向子类的实现;而子类没有覆盖的那些方法,比如 Object 的方法,直接引用指向父类或 Object 的实现。

    每周 3 篇学习笔记或技术总结,面向有一定基础的 Java 程序员,内容涉及 Java 进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等多个领域。关注作者或微信公众号 后端开发那点事儿 第一时间获取最新内容。

    展开全文
  • Java对象的创建: 在创建对象时通常只是一个new关键字,但是Java虚拟机首先会检查参数是否能在常量池中定位到一个类的符号引用,并检查这个类是否已经被加载,解析和初始化过,如果没有,那么必须先执行类...
  • Java多态的底层原理

    2018-11-05 14:02:58
    作为一门面向对象语言,Java 拥有封装、继承、多态三大特性。...多态的底层实现是动态绑定,即在运行时才把方法调用与方法实现关联起来。动态绑定涉及很多 JVM 的细节,全部写清楚需要很大篇幅,因此本文仅...
  • Java-JVM-从源代码到机器码 转载声明: 本文系转载自以下文章: JVM系列第4讲:从源代码到机器码,发生了什么? 作者:陈树义 来源:博客园 转载仅为方便学习查看,一切权利属于原作者,本人只是做了整理和排版,...
  • Java一些底层实现原理

    2019-03-14 13:21:34
    https://www.cnblogs.com/danbing/p/5023231.html 堆内存 https://www.cnblogs.com/panxuejun/p/5889418.html内存模型 https://blog.csdn.net/lxf512666/article/details/52819906数组 ...
  • java反射底层原理

    2019-08-19 19:58:16
    Java反射机制是java的这门语言所独有的,这也是面试官喜欢问的知识点之一,我们不能仅仅从会使用反射这个类以及类中方法,来认定自己会这个知识点,我认为这太过于表面,不是我们学习java的正确的方式。 首先我们先...
  • 参考链接,很详细
  • List集合List集合在编辑语言中是类库中的一个类,它继承与conllection,是一个接口的存在,不能实例化,需要实例化一个ArrayList或linkedlist,通俗点就是一张表、目录清单的。在集合中的任意位置进行增删改查操作都...
  • 一、开发运用的书Java基础(javase)javaweb基础(jsp,selvet,sql)JavaEE(Strust2,Mybatis,Hibernate,Spring,SpringMVC)二、原理Java编程思想,编译原理(工作一年左右看完) 2.大话设计模式 重构 改善既...
  • 一些框架,当然还有最基础的语法就可以进行一定的开发了,但是由于Java虚拟机等一些原因,如果我们不知道其底层原理以及一些东西的实现方法的话,调试改Bug非常困难,所以我们应该有一些Java底层原理的知识。...
  • Hashmap是java面试中经常遇到的面试题,大部分都会问其底层原理与实现,本人也是被这道题问惨了,为了能够温故而知新,特地写了这个博客,以便时时学习。 Hash结构 HashMap根据名称可知,其实现方法与Hash表有密切...
  • 目录 1.String、StringBufer、StringBuilder 1.1 String 1.2 StringBuffer、StringBuilder 1.3 Efficiency 2. Interface and abstract class 3. 运算符 3.1. 移位运算符 ...4.1 输出字节...
  • 在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是...
  • 【课程介绍】 本课程由业内技术大牛,经验丰富的讲师进行实战技术分享。 将带领大家深入理解HashMap的构造方法等源码底层实现原理,能够让学员逐步学会自己看源码
  • Java线程的底层实现

    2019-06-24 15:14:32
    是操作系统,尽管本文侧重于介绍 Java 线程的实现原理,但是请大家清楚一点,实际上实现线程的老大哥,是运行在内核态的操作系统。 Java 语言提供了不同硬件和操作系统平台下对线程操作的统一处理,每个已经执...
1 2 3 4 5 ... 20
收藏数 75,888
精华内容 30,355