面试题: !=!=未看4

以下面试题是针对最近热门Java面试题汇总,仅供参考!

一、自我介绍,以及介绍最近一个项目

简单介绍一下自己,姓名,籍贯,毕业以来工作多少年,在哪些公司工作过。一语带过即可。然后介绍一下最近做的一个项目,包含整体架构设计,涉及前后端框架,缓存,中间件以及数据库等。

二、String特性。StringBuffer 和 StringBuilder 区别

String a = "str"; String b = new String("str");问 a == b , a.equals(b) 的值是true还是false? 
这里涉及到 == 与 equals 的区别:
    ==:比较引用类型比较的是地址值是否相同

equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。

String a = "str"; ,"str" 存到方法区的字符串常量池。而String b = new String("str");,new String() 存到堆中,在指向常量池的"str"。用 == 时,a指向的是字符串常量池地址,而b指向的是 new String() 堆中存放地址。所以必然false。而String 的equals 是比较内容。所以是 true。

关于String要知道它是被final修饰的不可变类。频繁修改最好用 StringBuffer 或 StringBuilder。二者的区别,StringBuilder效率高,线程不安全。StringBuffer线程安全。

三、ArrayList 和 LinkedList 原理、区别以及底层数据结构

区别:

  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

知道这些还不够,最好看一遍源码。了解一下存在这些区别的原因。以第三点为例,为什么新增删除 ArrayList占优势呢?看了源码就会了解到。 ArrayList 底层结构是数组,首先数组是不可变的,新增要检查数组大小是否满足,不满足需要扩容,扩容就需要新建数组,然后将原数组copy到新数组,再制空原数组,在新数组新增。删除时,ArrayList会将后面部分的元素依次往上挪一个位置(就是copy)。其他方法不再描述,具体需要先熟悉一下源码。有时候会问到怎么保证ArrayList 线程安全。用Collections.synchronizedList()或改用 Vector。原理是方法前加入了synchronize关键字实现加锁。

四、HashMap、HashTable、ConcurrentHashMap 原理、源码、数据结构,线程是否安全

HashMap是数组加链表结构。通过key的hashcode 找到数组角标。再遍历链表。

HashTable和HashMap区别,属于线程安全,key value 不能为 null。

ConcurrentHashMap也是线程安全,结构可理解成 分裂数组+HashTable。效率比HashTable高,因为HashTable是整个Map加锁,ConcurrentHashMap是把锁加到 各个分裂数组上。

五、Lock 和 synchronize 实现原理与区别。简述乐观锁悲观锁。分布式锁实现方式

synchronized是托管给JVM执行的,而lock是java写的控制锁的代码。synchronized在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。但是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,否则将会引起死锁。在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize。

分布式锁实现方式:基于数据库实现,基于缓存(Redis,memcached,tair)实现,基于Zookeeper实现。

六、SpringMVC流程。常用注解。Spring的IOC和AOP

SpringMVC流程:

  1. 用户发送请求至前端控制器DispatcherServlet。
  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  4. DispatcherServlet调用HandlerAdapter处理器适配器。
  5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller执行完成返回ModelAndView。
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  9. ViewReslover解析后返回具体View。
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet响应用户。

七、微服务架构Spring Boot ,Spring Cloud

1.微服务的优势

2.Spring Cloud 五大神兽:(要知道实现原理,Eureka 是重点)

  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

八、多线程与高并发

多线程要了解线程常用方法。线程池的实现方式。如何避免死锁。生命周期。并发包常用类原理和应用场景:计数器CountdownLatch,栅栏CyclicBarrier,信号量semaphore,交换。

九、事务相关

项目中事务处理方案。

4种事务特性:

  • 原子性 (atomicity):强调事务的不可分割.
  • 一致性 (consistency):事务的执行的前后数据的完整性保持一致.
  • 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
  • 持久性(durability) :事务一旦结束,数据就持久到数据库

5种隔离级别:

  • DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别
  • 未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
  • 已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
  • 可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生
  • 串行化的 (serializable) :避免以上所有读问题

7种传播行为:

保证同一个事务中

  • PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
  • PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
  • PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

保证没有在同一个事务中

  • PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
  • PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
  • PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
  • PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

分布式事务处理方案(XA,TCC等,也可以了解一下阿里最近推出的 GTS) 推荐博客:https://blog.csdn.net/mine_song/article/details/64118963

十、常用那些设计模式,说出原理,已经框架中用到哪些。单例的几种写法

23种设计模式至少要了解Spring框架用到的一些设计模式。bean单例 beanfactory工厂 AOP动态代理等。

单例有饿汉式,懒汉式,静态内部类等方式。这些方式并非真正安全,可以用反射拿到,用枚举可以避免。

十一、常用中间件RabbitMQ,kafka等,原理、区别、优缺点

中间件的应用场景。

RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。

Kafka是linkedin开源的MQ系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。

十二、缓存:Redis原理,数据结构,集群几种方式。和memcache区别

十三、HTTP协议,RPC协议,Socket协议

十四、Nginx实现负载均衡的几种方式

轮询,随机,哈希,加权轮询,加权随机,最小连接数等。

十五、java1.8新特性

十六、关于jvm调优

原文地址:https://www.cnblogs.com/shan1393/p/9112457.html

时间: 2024-10-02 03:50:40

面试题: !=!=未看4的相关文章

面试题:大公司面试题 !=!=未看

作者:Xoper.ducky链接:https://www.nowcoder.com/discuss/3043?type=2&order=0&pos=5&page=2来源:牛客网 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能使大家少走点弯路 , 如果能耐心读完,相信对你会找到你需要的东西. 先说一下LZ的基本情况,LZ是四川某985学校通信专业的研究生(

面试题: !=!=未看

重点知识 由于我面试的JAVA开发工程师,针对于JAVA,需要理解的重点内容有: JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻) JVM内存调优(了解是怎么回事,一般做项目过程中使用较多) 设计模式(熟悉常见设计模式的应用场景,会画类图,实在不行背几个也是有用的) 多线程(每次都会问,包括线程和进程.线程状态.线程并发的操作等,需要深入复习) JAVA集合类框架(理解框架图.HashMap.ArrayList.HashSet等的关系和区别,其中HashMap的存储机制几乎

面试题: !=!=未看2

集合篇 在迭代一个集合的时候,如何避免ConcurrentModificationException? 在遍历一个集合的时候,我们可以使用并发集合类来避免ConcurrentModificationException,比如使用CopyOnWriteArrayList,而不是ArrayList. fail-fast与fail-safe有什么区别? 每次我们尝试获取下一个元素的时候,Iterator fail-fast属性检查当前集合结构里的任何改动.如果发现任何改动,它抛出ConcurrentMo

面试题: 1天的java面试题 !=!=未看

1,自我介绍下,我直接说的项目经历,(哪年在哪个公司呆过) 2,问是否有带过团队的经历,我说去年带过一次. 3,Struts是单例模式还是多例模式?我先说单例模式,后说多例模式. 4,JSP与STRUTS的区别是什么,我说了一大堆,面试官让我不要宏观的说,要细化的说,我给简单的说了struts下过滤器,拦截器,jsp有el表达式等. 5,问我ModelDriven是个类还是个接口?我先说是类,后来改说了是个接口. 6,ModelDriven是干什么的?我说是为了返回实体类的.又问返回的比如Use

面试题: 数据库 真实面试题未看13

今天到某公司笔试,数据库考的比较多,但是说老实话,考的也比较基础.现在趁回忆得起来,将数据库知识简单整理如下: 一.建表指令 比如创建一个学生表student,它由学号Sno,姓名Sname,性别Ssex,年龄Sage,所在系Sdept五个属性组成.其中学号不能为空,值是唯一的,并且姓名取值也唯一. CREATE TABLE Student (Sno    CHAR(10) NOT NULL UNIQUE, Sname  CHAR(20) UNIQUE, Ssex    char(2), Sag

js未看的文章

Web前端研发工程师编程能力飞升之路 在浏览器的背后(一) -- HTML语言的词法解析 组件化的前端开发流程 用js书写UI组件之js基础知识 GC与JS内存泄漏 蓝色理想之前端开发 w3c JavaScript Puzzlers react AngularJS入门教程 jQuery源码分析-如何做jQuery源码分析 http://jsfiddle.net/ http://fex.baidu.com/ idea独创意 js未看的文章,布布扣,bubuko.com

最新阿里Java技术面试题,看这一文就够了!

金三银四跳槽季即将到来,作为 Java 开发者你开始刷面试题了吗?别急,小编整理了阿里技术面试题,看这一文就够了! 阿里面试题目目录 技术一面(基础面试题目) 技术二面(技术深度.技术原理) 项目实战(项目模拟面试) JAVA开发技术常问的问题 阿里必会知识 阿里面试范畴 面试总结 文章福利(答案获取) 一:阿里技术一面(基础掌握牢固) 常用的异常类型? session java锁 gc原理 hashmap listlink arraylist 区别 aop 原理 多线程 kafka 原理和容错

面试题:面试题归类 !=!=未看 2

一.Java基础 1. String类为什么是final的. 答:主要是为了"效率" 和 "安全性" 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final. 2. HashMap的源码,实现原理,底层结构. 答:Java集合---HashMap源码剖析 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实

面试题: mysql数据库 未看7

mysql数据库面试总结 2017年09月04日 00:11:40 阅读数:151 结合网上大神还有自己面试经历,收集的总结Mysql面试题,方便自己准备面试: mysql一个永远都复习不完,尽量总结,差不多就可以去面试(个人观点) 1.数据库事务的四个特性及含义 数据库事务transanction正确执行的四个基本要素.ACID,原子性(Atomicity).一致性(Correspondence).隔离性(Isolation).持久性(Durability). 原子性:整个事务中的所有操作,要