问题：﻿为什么大多公司不要培训班培训出来的JAVA程序员？ 好多公司都是听到我们说是培训出来的都直接说不要培训出来的，哪怕不是计算机专业，说自学的也行，所以我要故意隐藏不说培训这段经历么？
话题：﻿互联网、程序员、编程、程序员面试、Java程序员
回答：﻿--12.15更新这一周比较忙，大家评论区的回答基本我还是看的，知友们素质的确普遍很高（先肯定对方），回答很友善，题目既然已经出，今天大致作下回答吧：2.方法区是jvm规范里要求的，永久区是Hotspot虚拟机对方法区的具体实现，前者是规范，后者是实现方式。本题看看对方在思想层面对jvm的理解程度，很基础的一个题目。3.ReadWriteRock读写锁，使用场景可分为读/读、读/写、写/写，除了读和读之间是共享的，其它都是互斥的，接着会讨论下怎样实现互斥锁和同步锁的，想了解对方对AQS，CAS的掌握程度，技术学习的深度。4.ReentrantLock直译过来也是可重入锁，其实Synchronized也属于可重入锁，何为可重入锁，特点是拿到对象锁具有执行权的线程可访问类中不同的加锁方法。然后讨论下为何这样，说说不可重入锁，谈谈自旋锁。5.Semaphore、CountDownLatch、CyclicBarrier、Exchanger为java并发编程的4个辅助类，面试中常问的CountDownLatchCyclicBarrier之间的区别，面试者肯定是经常碰到的，所以问起来意义不大，Semaphore问的相对少一些，有些知识点如果没有使用过还是会忽略，Semaphore可有多把锁，可允许多个线程同时拥有执行权，这些有执行权的线程如并发访问同一对象，会产生线程安全问题。6.写一个你认为最好的单例模式，这题面试者都可能碰到过，也算是最常遇到的设计模式之一，想考察面试者对经常碰到的题目的理解深度，单例一共有几种实现方式：饿汉、懒汉、静态内部类、枚举、双检锁，要是写了简单的懒汉式我就会问：要是多线程情况下怎样保证线程安全呢，对方可能说双检锁，那么聊聊为什么要两次校验，接着会问光是双检锁还会有什么问题，这时候基础好的面试者就会说了:对象在定义的时候加上volatile关键字，接下来我会和他继续引申讨论下原子性和可见性、java内存模型、类的加载过程。7.各大排序算法，数据结构的基础吧，一直觉得数据结构和算法是代码的灵魂！这题不会让写快排的，背都能背上，意义不大，说说接触过的内排序都有哪些，说下它们的排序方式、时间复杂度、是否稳定的，其实到这里这题算是结束了，只想看对方是否了解这些基础知识。但如果上面都答上来，我会接着和对方聊：稳定排序还有什么比较好的方式，这时候对方如果回答上来基数排序，起码我会觉得他基础还是不错，还是了解这些东西的。最终我会问如果对一个T级别大文件的url以时间戳进行排序有什么方式，引申聊聊分布式相关的知识。8.首先会聊下redis可以作哪些使用，如果谈到了分布式锁，分布式锁实现的方式有哪些，一般有三种，可以基于数据库、redis、zookeeper，其中redis实现分布式锁其实还是比较常见的。先拿setnx来争抢锁，抢到后，再用expire给锁加一个过期时间防止锁忘记了释放。当然如果在setnx之后执行expire之前进程意外crash或重启，这个锁就永远得不到释放，需要set指令将setnx和expire合成一条指令使用！redis本身没有事务，但可以通过一组指令集来实现事务的功能。redis常问的问题还有:keys指令和scan指令的区别，使用场景等。9.B树和B+树，这题既问mysql索引的实现原理，也问数据结构基础的，首先从二叉树说起，因为会产生退化现象，提出了平衡二叉树，再提出怎样让每一层放的节点多一些来减少遍历高度，引申出m叉树，m叉搜索树同样会有退化现象，引出m叉平衡树，也就是B树，这时候每个节点既放了key也放了value，怎样使每个节点放尽可能多的key值，以减少遍历高度呢（访问磁盘次数），可以将每个节点只放key值，将value值放在叶子结点，在叶子结点的value值增加指向相邻节点指针，这就是优化后的B+树。然后谈谈数据库索引失效的情况，为什么给离散度低的字段（如性别）建立索引是不可取的，查询数据反而更慢，如果将离散度高的字段和性别建立联合索引会怎样，有什么需要注意的？10java的private类型可以通过反射访问，那么private的意义是什么？这题也是一道思想题目，天天会碰到private，有没有想过这个问题？谈谈对java设计的认识程度，主要抓住两点：1.java的private修饰符并不是为了安全性设计的；2.从外部对对象进行常规调用时，能够看到清晰的类结构。11.进程间可通过管道、信号、消息队列、共享内存、socket进行通信，太基础了，不展开（试试阿里的面试，看会不会问）12.生产者消费者模式，synchronized锁住一个LinkedList，一个生产者，只要队列不满，生产后往里放，一个消费者只要队列不空，向外取，两者通过wait()和notify()进行协调，写好了会问怎样提高效率，最后会聊一聊消息队列设计精要思想及其使用。各位，现在我请问评论区的某些亲们！你们觉得我说的这几道题哪一题不是基础题！当初写的这几道题甚至都是我自己面试中曾经遇到过的，我依稀还记得有些公司名字！我还真没以为会有这么多人答不上来！评论区有人反问我lambda表达式foreach为什么比普通foreach快，麻烦你先把题目说正确了，你要问在什么时候快，什么时候慢。能看出来说我题目出的很中肯，每一题都可以引申的，居然没一个人点赞，还是我忍不住给他一个赞。说这些题目都是花里胡哨的，居然置顶了，为了不错误引导大家，我想想还是把他取消置顶。难道现在程序员的基础真的这么差了吗！就这几道题评论区说什么的都有，这几天我看着气着，太忙了却不能及时作答，亲们！这些真的是基础题啊！后面还有一大堆题目，这只是第一步，这几题都是聊下去的前提！后面还有一堆引申题，还有工程实践！有人就觉得难了！？有人给我留言说是这不是针对一两年工作经验的题目！也有人说，刚学java需要掌握这些吗？你们说的简直太对了！一两年工作经验哪里需要知道这些，我热泪盈眶，真的都是自己人，我也这么觉得！但你们说的只是道理，而我要说的是规则！道理就是作为劳动者一天只需要上班8小时，可事实是入职之初我需要每天加班到11点多，这段时间累的腰肌劳损，早晨起不来，迟到了，领导和我聊：你是要挑战我们规则吗？当时我恍然大悟：我加班、劳累、上班迟到，这些都是道理，而上班不准迟到，这是规则，道理很多时候都是屈服于规则的！不信，有多少人知道8小时工作制可还是加班的？同样，公司面试就一个规则，我缺人了，来面试的我不管他几年工作经验，我只看他是否符合我们招人要求，大公司一般对初中级工程师需求不高，这不年初我从前端刚转后端，去公司面试，各大公司问的问题几乎都是：jvm、多线程、分布式、分库分表...当时我心里就想骂娘，然而现在，我明白了，我去面试哪个公司，就得服从对方招人规则！而公司招人规则是有共性的。这就回到我当初的回答上来了，有人高二开始努力能够考上重点大学，有人十月复习却能考上top研究生，难道就不能花比别人短很多的时间，达到比别人高得多的学习效率吗！答案显然是肯定的，谈到学习，天赋、方法、努力，其中天赋最重要！但难以改变，能改变的就是学习方法和努力！可努力又谁都会，只要学习就可以了，这有什么难，但是努力能够达到什么高度，就要看方法！具体怎样学习的，以后再聊吧，有点事还需要处理下。对了留着第一题希望有人在评论区给一个高质量的回答！--------------以下为原答案-----------------我的回答要表达的是：从学习速度，意志力，抗压性等方面出发，我不相信一个几个月培训出来的程序员能够通过大公司面试（曾经做过一件成功事情的人除外：比如高考成功、减肥成功...）本来想睡觉了，看了几条答案忍不住了，我随便提几个问题吧：jvmgc复制算法是怎样实现的对方法区和永久区的理解，之间的关系ReadWriteRock读写互斥吗ReentrantLock是可重入锁，什么是可重入锁Semaphore拿到执行权的线程间互斥吗写一个你认为最好的单例模式各大排序算法redis可以实现事务吗，怎样实现分布式锁B树和B+树是解决什么样的问题的，怎样演化过来，之间区别java的private类型可以通过反射访问，那么private的意义是什么进程间通信的方式有哪些写一个生产者消费者模型怎样，这些问题很基础吧，一个也不该错，错三个以上，我们不用再聊了，当真以为面试官都是傻子，能不知道一个面试者水平，简历造假能看不出来，是否有真实项目经验能问不出来顺便说一句，以上的问题是我学习java3个月时候掌握的回答评论区问我学习的教材其他相关回答：Java程序员，最常用的20％技术有哪些？ZO01：一线互联网公司Java常见面试题ZO01：Java开发常用工具快捷键汇总你遇到过哪些质量很高的Java面试？