专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 深圳java各公司面试题哪里有

深圳java各公司面试题哪里有

更新时间:2020-07-16 10:35:09 来源:动力节点 浏览1791次

有很多人都很向往深圳这个城市,在深圳有很多的互联网企业,市场对java开发人才需求非常大,对于年轻人来说,去深圳发展也是一个不错的选择。要想应聘java程序员,就会遇到面试题的问题。那么,深圳java各公司面试题哪里有?这个问题就由动力节点深圳java培训机构的小编来为大家解答。

深圳java各公司面试题

深圳java面试题哪里有?小编为大家做了以下java面试题的整理,希望对大家能够有所帮助。

1、Java内存模型:

Java虚拟机规范中将Java运行时数据分为六种。

(1)程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的程序计数器,互不影响,该区域为“线程私有”。

(2)Java虚拟机栈:线程私有的,与线程生命周期相同,用于存储局部变量表,操作栈,方法返回值。局部变量表放着基本数据类型,还有对象的引用。

(3)本地方法栈:跟虚拟机栈很像,不过它是为虚拟机使用到的Native方法服务。

(4)Java堆:所有线程共享的一块内存区域,对象实例几乎都在这分配内存。

(5)方法区:各个线程共享的区域,储存虚拟机加载的类信息,常量,静态变量,编译后的代码。

(6)运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。

2、java GC是在什么时候,对什么东西,做了什么事情?

在什么时候:

(1)新生代有一个Eden区和两个survivor区,首先将对象放入Eden区,如果空间不足就向其中的一个survivor区上放,如果仍然放不下就会引发一次发生在新生代的minor GC,将存活的对象放入另一个survivor区中,然后清空Eden和之前的那个survivor区的内存。在某次GC过程中,如果发现仍然又放不下的对象,就将这些对象放入老年代内存里去。

(2)大对象以及长期存活的对象直接进入老年区。

(3)当每次执行minor GC的时候应该对要晋升到老年代的对象进行分析,如果这些马上要到老年区的老年对象的大小超过了老年区的剩余大小,那么执行一次Full GC以尽可能地获得老年区的空间。

对什么东西:从GC Roots搜索不到,而且经过一次标记清理之后仍没有复活的对象。

做什么: 新生代:复制清理; 老年代:标记-清除和标记-压缩算法; 永久代:存放Java中的类和加载类的类加载器本身。

GC Roots都有哪些: 1. 虚拟机栈中的引用的对象 2. 方法区中静态属性引用的对象,常量引用的对象 3. 本地方法栈中JNI(即一般说的Native方法)引用的对象。

3、Synchronized 与Lock都是可重入锁,同一个线程再次进入同步代码的时候.可以使用自己已经获取到的锁。

Synchronized是悲观锁机制,独占锁。而Locks.ReentrantLock是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。 ReentrantLock适用场景

(1)某个线程在等待一个锁的控制权的这段时间需要中断

(2)需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程,锁可以绑定多个条件。

(3)具有公平锁功能,每个到来的线程都将排队等候。

4、happens-before:如果两个操作之间具有happens-before 关系,那么前一个操作的结果就会对后面一个操作可见。

(1)程序顺序规则:一个线程中的每个操作,happens- before 于该线程中的任意后续操作。

(2)监视器锁规则:对一个监视器锁的解锁,happens- before 于随后对这个监视器锁的加锁。

(3)volatile变量规则:对一个volatile域的写,happens- before于任意后续对这个volatile域的读。

(4)传递性:如果A happens- before B,且B happens- before C,那么A happens- before C。

(5)线程启动规则:Thread对象的start()方法happens- before于此线程的每一个动作。

5、CAS(Compare And Swap) 无锁算法: 

CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。

6、线程池的作用: 

在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

第三:提高线程的可管理性。

常用线程池:ExecutorService 是主要的实现类,其中常用的有 Executors.newSingleThreadPool(),newFixedThreadPool(),newcachedTheadPool(),newScheduledThreadPool()。

7、Redis数据结构: String—字符串(key-value 类型)

Hash—字典(hashmap) Redis的哈希结构可以使你像在数据库中更新一个属性一样只修改某一项属性值

List—列表 实现消息队列

Set—集合 利用唯一性

Sorted Set—有序集合 可以进行排序 可以实现数据持久化

8、Spring事务配置方法:

(1)切点信息,用于定位实施事物切面的业务类方法

(2)控制事务行为的事务属性,这些属性包括事物隔离级别,事务传播行为,超时时间,回滚规则。

Spring通过aop/tx Schema 命名空间和@Transaction注解技术来进行声明式事物配置。

9、Mybatis

每一个Mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心。首先用字节流通过Resource将配置文件读入,然后通过SqlSessionFactoryBuilder().build方法创建SqlSessionFactory,然后再通过SqlSessionFactory.openSession()方法创建一个SqlSession为每一个数据库事务服务。

经历了Mybatis初始化 –>创建SqlSession –>运行SQL语句,返回结果三个过程

10、HashMap与HashTable的区别。

(1)HashMap是非线程安全的,HashTable是线程安全的。

(2)HashMap的键和值都允许有null值存在,而HashTable则不行。

(3)因为线程安全的问题,HashMap效率比HashTable的要高。

深圳java各公司面试题哪里有

以上就是动力节点深圳java培训机构的小编针对“深圳java各公司面试题哪里有?”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>