阿里巴巴面试题及答案_十大经典思维面试题

阿里巴巴面试题及答案_十大经典思维面试题,第1张

阿里巴巴面试题及答案_十大经典思维面试题 我们在 *** 作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。


如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。


MySQL 锁概述相对其他数据库而言,MySQL 的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。


比如: MyISAM 和 MEMORY 存储引擎采用的是表级锁(table-level locking);InnoDB 存储引擎既支持行级锁( row-level locking),也支持表级锁,但默认情况下是采用行级锁。


MySQL 主要的两种锁的特性可大致归纳如下:阿里 P8 架构师谈:MySQL 行锁、表锁、悲观锁、乐观锁的特点与应用表级锁: 开销小,加锁快;不会出现死锁(因为 MyISAM 会一次性获得 SQL 所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。


行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。


页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般行锁 和 表锁1.主要是针对锁粒度划分的,一般分为:行锁、表锁、库锁(1)行锁:访问数据库的时候,锁定整个行数据,防止并发错误。


(2)表锁:访问数据库的时候,锁定整个表数据,防止并发错误。


2.行锁 和 表锁 的区别:表锁: 开销小,加锁快,不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低行锁: 开销大,加锁慢,会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高悲观锁 和 乐观锁 (1)悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到锁。


传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做 *** 作之前先上锁。


(2)乐观锁: 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。


乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition 机制的其实都是提供的乐观锁。


(3)悲观锁 和 乐观锁的区别:两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。


但如果经常产生冲突,上层应用会不断的进行 retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。


共享锁共享锁指的就是对于多个不同的事务,对同一个资源共享同一个锁。


相当于对于同一把门,它拥有多个钥匙一样。


就像这样,你家有一个大门,大门的钥匙有好几把,你有一把,你女朋友有一把,你们都可能通过这把钥匙进入你们家,这个就是所谓的共享锁。


刚刚说了,对于悲观锁,一般数据库已经实现了,共享锁也属于悲观锁的一种,那么共享锁在 mysql 中是通过什么命令来调用呢。


通过查询资料,了解到通过在执行语句后面加上 lockin share mode 就代表对某些资源加上共享锁了。


什么时候使用表锁对于 InnoDB 表,在绝大部分情况下都应该使用行级锁,因为事务和行锁往往是我们之所以选择 InnoDB 表的理由。


但在个别特殊事务中,也可以考虑使用表级锁。


第一种情况是:事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间锁等待和锁冲突,这种情况下可以考虑使用表锁来提高该事务的执行速度。


第二种情况是:事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。


这种情况也可以考虑一次性锁定事务涉及的表,从而避免死锁、减少数据库因事务回滚带来的开销。


当然,应用中这两种事务不能太多,否则,就应该考虑使用 MyISAM 表了。


表锁和行锁应用场景:表级锁使用与并发性不高,以查询为主,少量更新的应用,比如小型的 web 应用;而行级锁适用于高并发环境下,对事务完整性要求较高的系统,如在线事务处理系统。


BAT 技术面试范围 数据结构与算法:最常见的各种排序,最好能手写Java 高级:JVM 内存结构、垃圾回收器、回收算法、GC、并发编程相关(多线程、线程池等)、NIO/BIO、各种集合类的比较优劣势(底层数据结构也要掌握,特别是扩容等)等。


性能优化、设计模式、UML 的掌握Spring 框架:重点掌握(BAT 每次必问)分布式相关:Redis 缓存、一致 Hash 算法、分布式存储、负载均衡等。


微服务以及 Docker 容器等。


阿里面试总结 阿里的面试特别喜欢面试技术原理,特别是多线程NIO异步消息框架分布式相关的缓存算法等JVM 的加载过程和原理回收算法以及具体使用过的框架,会问部分参数检验你是否熟用第一面能通过,后续被录用的可能性就比较高了,第一轮非常重要,建议系统性的学习面试题目!一面: HashMap 实现原理,ConcurrentHashMap 实现原理红黑树,为什么允许局部不平衡TCP,UDP 区别,为什么可靠和不可靠一次 HTTP 请求的全过程,包括域名解析、定位主机等TCP 三次握手MySQL 事务是什么?四大特性,四大隔离级别ConcurrentHashMap 和 Hashtable 区别spring IOC 和 AOP,以及各有什么优点有哪几种常用的线程池什么情况下使用 Runnable 和 Thread 创建线程,Runnable 和 Callable 的区别线程方法中的异常如何处理,副线程可以捕获到吗synchronized 和锁的区别,什么情况下使用 synchronized 和 ReentrantLockJVM 的对象分配在哪个区,Class 对象分配在哪个区二面: 常用的设计模式介绍:单例模式、装饰者模式等Java 会出现内存溢出吗?什么情况下会出现?双亲委派模型,为什么这样做?对象什么情况下进入老年代?快速排序说一下过程AOP 实现原理:动态代理BIO、NIO(如何实现的)、AIO消息中间件有哪些?他们之间的优劣势?Redis,持久化框架栈和队列垃圾回收算法MySQL 的索引Tomcat 类加载器OOM 内存泄漏,什么情况下会出现,如何排查三面:介绍你实践的性能优化案例,以及你的优化思路微服务和 SOA 的区别,优劣势SQL 慢查询的优化方案,索引和表的优化方案。


MySQL 与 MongoDB 的区别,海量数据的存储缓存框架,例如 Redis、Memcached 之间的区别,优劣势比较请描述一致 hash 算法分布式 session 的共享方案有哪些,有什么优劣势高并发情况,系统的优化方案有哪些,以及优先级排序。


面试总结一面: ArrayList 和 linkedlist 区别。


ArrayList 是否会越界。


ArrayList 和 hashset 有何区别。


hashset 存的数是有序的么。


volatile 和 synchronized 区别多态的原理数据库引擎 Innodb 和 myisam 区别Redis 的数据结构Redis 是基于内存的么Redis 的 list zset 的底层实现http 和 https 的区别,tcp 握手过程jvm 垃圾回收算法手写冒泡手写单例包括多线程下Java 线程间怎么实现同步,notify()与 notifyAll()的区别数据库的悲观锁和乐观锁应用场景。


排序算法的复杂度,快速排序非递归实现。


海量数据过滤,黑名单过滤一个 url。


二面: list set map 底层使用什么实现的有哪些典型实现hashmap 扩容是怎么扩容的,为什么是 2 的幂concurrenthashmap 为什么线程安全,采用了什么措施应对高并发线程池的参数有什么意义Springmvc 请求流程Spring IOC,autowired 如何实现Spring bootSpringClound 的基本架构设计Dubbo 和 SpringClound 的区别在哪里,优劣势说说一致性 Hash 算法三面: 分布式架构设计哪方面比较熟悉讲讲你对 CDN 的了解,与分布式缓存和本地缓存的区别多线程和高并发有什么区别高并发下有哪些常用的技术解决方案,举三个高并发场景设计例子说一个你对 JVM 优化的实际案例,包括实际步骤和方法Docker 有使用过和了解吗?Docker 和 JVM 的区别是什么?Docker 的基本架构和使用场景?负载均衡有接触过哪些开源框架,优劣势是什么?数据库分库分表需要怎样来实现?数据库端的常用优化策略?如果让你来设计秒杀系统,你的设计思路是什么,为什么要这样设计?面试总结: java 的基础知识点,主要围绕在集合类和多线程等:ArrayList、LinkedList、HashSet、HashpMap的数据结果,以及如何扩容、以及 ConcurrentHashMap 相关的多线程安全等。


JVM 的内存分配、几个常见的垃圾回收算法以及原理、还有对应的 JVM 优化参数需要牢记。


网络:TCP 的三次握手等网络都必问,重点掌握网络协议。


Redis:作为分布式缓存的主力,基本也是 BAT 每次必考,重点是 Redis 的数据结构、内存、算法、持久化,以及与别的缓存 memcached 的优劣势。


多线程:状态流转、多线程的实现,以及与高并发的区别等。


Spring 框架问得是最多的,BAT 非常喜欢问,重点掌握。


最后就是分布式架构设计常用的分布式架构设计方案:单点登录、分布式缓存、存储、消息的选型,还有就是数据库端的优化方案(需要提前了解)。


最好能提前了解深入一个类似秒杀这样的项目,如果面试官问到类似的项目,你能把设计思路讲出来,这对你的面试结果是很大的加分项。


一面 1.自我介绍2.谈一个你觉得你学到最多的项目,使用了什么技术,挑战在哪里3.Spring 的 bean 的作用域?(比如:singleton,prototype 等)4.Spring 的 IOC 实现原理?没有无参构造函数能实例化吗?有参构造函数注入?(xml 配置)5.通过反射,谈到了方法区,然后,类加载机制?6.synchronized 的实现原理?Volatile 能保证原子性吗?为什么?7.hashmap 和 concurrenthashmap 的 size 方法怎么实现的8.JVM 的调优参数?(-Xmn,-Xms 等具体参数设置)9.线程池优点,参数,如果我想实现 newSingleThreadPoll,应该怎么配置,构造方法传什么参数10.mysql 死锁,怎么解决,如果不要求执行顺序,死锁怎么解决11.ioc 和 aop 原理12.线程的五态?转化过程?13.TCP 三次握手,为什么三次握手?14.JVM 内存分区?(主存,工作内存,堆,栈。








)15.讲一下 GC?16.为什么要用老年代和新生代?17.新生代进入老生代的情况?18.新生代的分区?二面 变着法的问了一大堆线程池的知识 (主要考对应的参数)java 内存模型lock 和 synchronized 的区别reentrantlock 的实现hashmap 和 concurrenthashmapB+树和 B-树的区别复合索引聚集索引和非聚集索引的区别?数据库索引 主键和唯一索引有什么区别索引失效条件,什么时候该建立索引innDB 和 MyISAM 的区别?线程安全(阻塞同步,非阻塞同步,无同步)三面 主要高并发和分布式架构设计服务器模型以及之间的区别线程池的设计线程池如何做负载均衡如何实现线程调度算法复合索引是如何实现的?如何设计单点登录,单点登录的原理redis 缓存和 memcached 缓存的区别,以及各自的优劣势大型高并发网站如何做性能优化:Web 性能、数据库性能、应用服务器性能等。


实践中如何优化 MySQL:SQL 语句及索引的优化、数据库表结构的优化、系统配置的优化、硬件的优化分库分表和读写分离如何设计微服务架构:dubbo 和 springcloud 的区别,以及各自对应的使用场景。


淘宝一面: 面试介绍1)自我介绍?2)项目介绍?3)遇到的最大困难是什么?怎么解决的?4)你觉得你能怎么优化这个项目?面试题目 1)讲一下 JVM2)讲一下 JVM 的分代回收以及具体算法3)将一下 JVM 的垃圾收集器,G1 和 CMS 有啥区别?4)讲一下一个变量从产生到结束所经历的过程,讲一下字符串常量的过程?5)将一下线程安全问题产生的原因?6)讲一下乐观锁和悲观锁7)乐观锁是怎么保证一致性的8)Integer 和 int 有啥区别,integer 中有哪些特殊的函数?9)讲一下数据库的隔离等级10)说一下 MVCC11)说一聚簇索引和非聚簇索引的有什么不同淘宝二面:1、问了冒泡排序,快排,和归并排序及优缺点和优化2,网络方面有 osi 七层,tcp/ip 五层,分别有哪些协议及作用3,爬虫用的什么数据结构4、tcp 的流量控制和拥塞控制5,mysql 用的什么存储引擎,这个存储引擎用的什么数据结构 ,有哪些优缺点,怎么使用6,jvm 的垃圾回收机制和垃圾收集器7、spring 当中事物的隔离级别8、jdk1.8 concurrenthashmap 的新的特性,有没有看过源码9、 threadlocal 了解吗10,问了 redis 的一些问题,项目中有(扩容,失效 key 清理策略等)11,剩下的都是项目的东西(kafka filebeat elk 原理,主从选举,复制等)12,后面扩展的问了一些大数据相关的,问我一些大数据处理框架是否有了解整个过程四十分钟左右淘宝三面 主要项目,你做过哪些项目,用过哪些技术?了解哪些框架?你觉得对你技术提升最高的是哪一件事情,提升了你哪一方面的技术?1)讲一下 Spring AOP 和 IOC 的底层实现2)说一下 hashcode 的作用?HashMap 的底层实现?HashMap 和 HashTable 的区别3)说一下 concurrentHashMap 和 hashTable 在性能上的区别?以及这种差异形成的原因4)讲一下堆以及堆排序5)说一下 B+tree 和二叉搜索树的区别?说一下二叉搜索树和 AVL 树、红黑树之间的差别6)给你两个文件(字符串形式的)如何找出他们之间的不同地方?7)你刚刚说的能怎么优化?淘宝四面 交叉面 本来以为三面结束就是 hr 面了,又收到一面交叉面1. 给你 50 亿行字符串,机器 4G 内存(只能一台机器),找出重复次数最多的那行字符串?(以行为单位,每行不超过 10 个字符)2.设计一个算法,实现两个 10g 大文件在 10m 的内存中将两个大文件中重复的放进第三个文件3. 快速排序的平均复杂多少?最坏情况是什么?(这个题估计就是缓和一下尴尬的气氛)支付宝一面 4. 介绍一下自己。


5. 项目参与的核心设计有哪些6. ArrayList 和 LinkedList 底层7. HashMap 及线程安全的 ConcurrentHashMap,以及各自优劣势8. Java 如何实现线程安全9. Synchronized 和 Lock 哪个更好?10. HashMap 中的 get()方法是如何实现的?11. HashMap 可以用在哪些场景?12. JVM,垃圾回收机制,内存划分等13. SQL 优化,常用的索引?14. 还有什么问题需要问的。


15. 支付宝二面16. 没有自我介绍,直接问做过哪些 Java 开发相关的项目。


17. 对哪些技术比较熟悉?18. 多线程状态图,状态如何流转?19. 死锁,死锁原因20. 页锁、乐观锁、悲观锁?21. 乐观锁如何保证线程安全?22. 用过线程池吗,对应的好处,如何用?23. 两个 10G 的文件,里面是一些 url,内存只有 1G,如何将这两个文件合并,找到相同的 url?24. 1000 个多并发线程,10 台机器,每台机器 4 核的,设计线程池大小。


25. 代码题:两个有序数组,数组中存在重复数字,合并成一个有序数组,去除重复数字。


26. 说一下自己的优点。


27. 支付宝三面 28. jvm 性能调优都做了什么29. 数据库性能调优如何做30. 分布式系统原理:CAP,最终一致性,幂等 *** 作等31. 高并发情况下,我们系统是如何支撑大量的请求的32. 集群如何同步会话状态33. 常用 NOSQL,有做过比较?34. 什么情况会出现雪崩,以及如何应对?35. 负载均衡的原理36. 数据库事务属性以上就是完整的阿里技术面试题目、以及阿里面试经验总结,希望对你有所帮助! 面试答案!面试答案整理出来了,这次技术面试针对的岗位是阿里P8,各位可以比较一下!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/625575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-16
下一篇 2022-04-16

发表评论

登录后才能评论

评论列表(0条)

保存