虽然天猫、蚂蚁金服、菜鸟都是阿里旗下的,但是每个面试官问的问题都不一样。主要的相似之处在于过程。面试开始会有自我介绍,主要业务架构和技术架构。业务架构一般不深究,但是面试官一定要懂,一般面试官会问如何根据这些业务设计技术架构。听听下面的面试题,看看你能不能回答出来,在屏幕或者评论区给出你的答案。众所周知,哔哩哔哩是一个学习网站,这里有一套完整的BAT大厂面试题,包括java基础、java框架、java中间件、Redis、kafka、计算机网络、并发编程、jvm、设计模式、netty、等等,一共80多道PDF面试题其他什么是幂等性?什么情况下应该考虑幂等性?你如何解决幂等性问题?多个Java线程同时读写,读线程数远大于写线程数。你觉得并发问题应该怎么解决?您会选择添加哪种锁?你了解JAVA的AQS吗,它有什么作用?除了synchronized关键字之外,如何确保线程安全?什么时候需要添加volatile关键字?它能保证线程安全吗?如果线程池中的所有线程都忙碌并提交新任务,会发生什么情况?队列满了,如果队列还忙怎么办?一般如何调整Tomcat自身的参数?synchronized关键字锁定什么?它在字节码中是如何表示的?它如何作用于内存中的对象?wait/notify/notifyAll方法是否需要包含在同步块中?这是为什么?你一般如何使用ExecutorService?是每个服务一个还是每个项目一个?有什么好处?Spring你用过SpringAOP吗?它是做什么用的?它将如何使用?如果?一个接口有2个不同的实现,如何自动装配一个特定的实现?Spring的声明式事务@Transaction注解一般写在哪里?抛出异常会自动回滚吗?有没有办法控制不触发回滚?如果想在一个Bean生成组装好之后执行自己的逻辑,怎么实现呢?为什么SpringBoot不放在在线容器中也能跑HTTP服务呢?如果你想在SpringBoot中使用自定义配置文件而不仅仅是application.properties,你应该怎么做?RequestMapping可以在SpringMVC中指定GET和POST方法吗?如何指定?如果SpringMVC要将输出对象(如XXResult或XXResponse)打包为JSON输出,应该如何处理?如何使用SpringMVC拦截异常,然后做自定义处理,比如打日志或者打包成JSONMySQL。如果插入MYSQL的数据很多,你会选择什么方式?如果查询很慢,您首先想到的是什么?搜索报价是为了什么?如果建立了单列索引,查询时发现有两列,是否会使用这个单列索引?如果建了一个多列的索引,只用第一列查询,这个索引还能用吗?三列呢?接上一个问题,如果where条件后面跟着一个i+5<100,会用到这个索引吗?如何查看是否使用了索引?像%aaa%这样的东西会使用索引吗?喜欢aaa%?删除,截断,删除之间的区别?你平时是怎么监控数据库的?如何解决慢SQL问题?你的数据库是否支持emoji表情,如果不支持,如何操作?你的数据库单表数据量是多少?通常多长时间开始显示查询性能急剧下降?查询死了,用什么命令可以查到执行查询的进度呢?你知道后通常会做什么?如何读写分离?您认为中间件将如何运作?这跟商业有什么关系?你做过分库分表吗?在线迁移过程是怎样的?我怎样才能确定数据是正确的?你知道哪个JVM或者你在线使用什么GC策略?它有什么优势,适用于哪些场景?JAVA类加载器有几种类型?他们之间是什么亲子关系?双亲委派机制是什么意思?有什么好处?如何自定义类加载器?您使用了哪些或者您在哪里需要自定义类加载器?堆内存设置的参数有哪些?PermSpace中保存了哪些数据?会不会导致OutOfMemory?做gc的时候,一个对象在内存的各个空间移动的顺序是怎样的?您遇到过OutOfMemory问题吗?你是如何解决这个问题的?这个过程有什么收获?PermSpace在1.8之后有什么变化?MetaSpace的大小默认是没有限制的吗?还是您会以某种方式指定尺寸?Jstack是做什么的?Jstat呢?如果线上程序周期性卡顿,怀疑可能是GC引起的。您将如何解决此问题?你通常看线程日志的哪一部分?你在StackOverflow上遇到过异常吗?大家一般猜想在什么情况下会触发呢?如何指定线程的堆栈大小?一般写多少?linux命令日志很大,只想看最后100行,怎么办?如果想一直看日志的不断输出,用什么命令呢?日志输出了,想实时查看是否有某个关键字怎么办?如果grep忽略大小写会发生什么?正则表达式呢?VIM中下一行的键是什么?接下来的30行呢?什么是跳到文件行的末尾?什么是回跳?什么是反向搜索?如果有文本文件,使用空格作为列的分隔符。如果我想统计第三列每个单词出现的次数怎么办?如果按上面出现的次数排序怎么办?如果我想按照数字本身的顺序而不是字符串的顺序排列数字怎么办?Linux环境变量的分隔符是什么?什么命令用于设置环境变量?设置某个文件权限用什么命令,比如设置为64?这个6是什么意思?如果想在Linux中查看某个进程的资源使用情况,怎么看呢?系统负载是什么意思?您的在线系统负载是多少?如果是4核机器,你觉得多少负载比较正常?在上面的命令中按1会发生什么?在top命令中,有时所有进程的CPU使用率加起来都超过100%,这是怎么回事?还有哪些其他命令可以检查系统性能或帮助您发现问题?你通常看哪个参数?查看进程打开了哪些网络连接的命令是什么?您更关心哪种连接状态?-题外话你有没有优化过Linux系统的参数,优化了什么?系统参数积压了,有什么用?检查网络连接,发现很多TIMEWAIT。可能是什么原因?它将如何影响您的申请?你会选择什么方法来减少这些TIMEWAIT?能介绍一下TCP的三次握手过程吗?如果有网络程序,你使用第三方库发送数据,你怀疑这个库发送的数据有问题,那怎么办?核实?你如何分析tcpdump导出的文件?KeepAlive是做什么用的?这样做有什么好处?Redis-能介绍一下开发缓存穿透吗?您认为应该如何解决这个问题如何触发缓存更新?(比如设置超时时间(被动方式),比如更新时主动更新)?如果是被动方式,如何控制多个条目同时触发一次缓存更新?你用Redis做什么?为什么不用Memcached、Cassandra等其他KV存储的例子呢?你用什么Redis客户端?Redis高性能的原因大概可以说说?您熟悉哪些Redis数据结构?zset是做什么用的?它与设置有何不同?Redis哈希、存储和检索的具体命令名称是什么?LPOP和BLPOP有什么区别?Redis中包含SCAN关键字的命令有哪些?SCAN返回的数据量是固定的吗?在Redis的Lua中使用过吗?它可以用来做什么?为什么可以这么用?Redis的管道是干什么用的?-维护Redis持久化的方式有几种?AOF与RDB有什么区别?AOF有什么优点和缺点吗?RedisReplication的大致流程是怎样的?bgsave这条命令的执行过程?-题外话如果有大量的KV数据要存入Redis,但是内存不够用,怎么减内存呢?为什么这会缩小内存?Redis中的List和HashTable都用到了ZipList,为什么要选择它呢?监控和稳定业务日志是如何收集的?如何监控在线机器?使用了哪些开源产品或自研产品?是分钟还是秒?如果让你寻找一种方法来收集JAVA后端应用程序的性能数据,你会关心哪些方面?您会选择收集哪些工具和想法?一般给第三方打电话的时候,会不会监听通话情况?今天阿里的面试题就到此差不多结束了。你回答视频之前的那个了吗?
