ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

外包Java后端开发三年,终于搞明白了

2021-07-06 07:53:07  阅读:128  来源: 互联网

标签:Java 外包 后端 对象 Spring 代理 spring 线程 AOP


# 一面 * 自我介绍 * 项目中的监控:那个监控指标常见的有哪些? * 微服务涉及到的技术以及需要注意的问题有哪些? * 注册中心你了解了哪些? * consul 的可靠性你了解吗? * consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过? * 项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理 * Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别? * Spring Cloud 有了解多少? * Spring Bean 的生命周期 * HashMap 和 hashTable 区别? * Object 的 hashcode 方法重写了,equals 方法要不要改? * Hashmap 线程不安全的出现场景 * 线上服务 CPU 很高该怎么做?有哪些措施可以找到问题 * JDK 中有哪几个线程池?顺带把线程池讲了个遍 * 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描 * SQL 索引的顺序,字段的顺序 * 查看 SQL 是不是使用了索引?(有什么工具) * TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的? * 说下你知道的排序算法吧 * 查找一个数组的中位数? # 二面 **你有什么问题想问我的吗?(常规问询)** * 自我介绍、工作经历、技术栈 * 项目中你学到了什么技术? * 微服务划分的粒度? * 微服务的高可用怎么保证的? * 负载均衡与反向代理,隔离,限流,降级,超时与重试,回滚,压力测试与应急预案 * 常用的负载均衡,该怎么用,你能说下吗? * * * **(技术问)** * http重定向 * DNS负载均衡 * 反向代理负载均衡 * IP负载均衡(LVS-NAT) * 直接路由(LVS-DR) * IP隧道(LVS-TUN) * 网关能够为后端服务带来哪些好处? * Spring Bean 的生命周期 * xml 中配置的 init、destroy 方法怎么可以做到调用具体的方法?反射的机制 * Object 类中的方法 * 对象比较是否相同 * hashmap put 方法存放的时候怎么判断是否是重复的 * Object toString 方法常用的地方,为什么要重写该方法 * Set 和 List 区别? * ArrayList 和 LinkedList 区别 * 如果存取相同的数据,ArrayList 和 LinkedList 谁占用空间更大? * Set 存的顺序是有序的吗? * 常见 Set 的实现有哪些? * TreeSet 对存入对数据有什么要求呢? * HashSet 的底层实现呢? * TreeSet 底层源码有看过吗? * HashSet 是不是线程安全的?为什么不是线程安全的? * Java 中有哪些线程安全的 Map? * HashTable 你了解过吗? * 如何保证线程安全问题? * synchronized、lock * volatile 的原子性问题?为什么 i++ 这种不支持原子性?从计算机原理的设计来讲下不能保证原子性的原因happens before 原理 * cas 操作 * lock 和 synchronized 的区别? * 公平锁和非公平锁 * Java 读写锁 * 读写锁设计主要解决什么问题? * 你项目除了写 Java 代码,还有前端代码,那你知道前端有哪些框架吗? * MySQL 分页查询语句 * MySQL 事务特性和隔离级别 # 二、事务的并发问题 * 不可重复读会出现在什么场景? * sql having 的使用场景 * 前端浏览器地址的一个 http 请求到后端整个流程是怎么样? * http 默认端口,https 默认端口 * DNS 你知道是干嘛的吗? * 你们开发用的 ide 是啥?你能说下 idea 的常用几个快捷键吧? * 代码版本管理你们用的是啥? * git rebase 和 merge 有什么区别? 你们公司加班多吗?(题外话) **举例回答:** 项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理 答:(1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。 (2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。 (3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。 (4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。 总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。 注入方式有两种:依赖注入和设置注入; IoC的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。 **AOP(Aspect Oriented Programming)** (1). AOP面向方面编程基于IoC,是对OOP的有益补充; (2). AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 (3). AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。 (4). 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。 (5). Spring实现AOP:JDK动态代理和CGLIB代理 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理;其核心的两个类是InvocationHandler和Proxy。 CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驱动的切面实际上底层也是通过动态代理实现的。 **(6). AOP使用场景:** * Authentication 权限检查 * Caching 缓存 * Context passing 内容传递 * Error handling 错误处理 * Lazy loading延迟加载 * Debugging 调试 * logging, tracing, profiling and monitoring日志记录,跟踪,优化,校准 * Performance optimization性能优化,效率检查 * Persistence 持久化 * Resource pooling资源池 * Synchronization同步 * Transactions 事务管理 另外Filter的实现和struts2的拦截器的实现都是AOP思想的体现。 # 美团面试场景以及面试答案(文档总结) ![全靠这套面试题,才让我有惊无险美团二面拿offer (面经解析)](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625527943678925.jpg) # 总结 对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等) ![image](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625527943225005.jpg) **需要面试题以及项目大纲的朋友点赞+收藏后,[点击这里免费](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)获取!诚意满满!!** **Java面试精选题、架构实战文档:[传送门](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)** **整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~** **你的支持,我的动力;祝各位前程似锦,offer不断!**

标签:Java,外包,后端,对象,Spring,代理,spring,线程,AOP
来源: https://blog.51cto.com/u_15290979/2985334

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有