腾讯校招一面20230830
- 挑一个项目重点讲一下【数据库迁移】
为什么要迁移
既然公司从2018年就开始迁移了,为什么不沿用其他部门的方案
dts细讲一下,数据库是放在阿里云还是腾讯云还是物理机上
如果插入mongo成功,插入mysql失败。那结果应该怎么来做。【如果答覆盖的话会有问题:例如:A插入mongo成功,但是插入B失败,如果这个时候我们进行覆盖,那么本质上也是对mysql进行一个插入的操作,那么这样不就重复了吗?这个点需要重新考虑】
ObjectId相关的概念,怎么生成的
表涉及到多大的数据量
这个方案还有没有优化的空间?
有没有做读写分离,什么是读写分离
ThreadLocal机制,原理大概说一下。为什么需要将key设置为弱引用【重点看一看,自己还是不清楚】。threadLocal.get过程是怎么样的。为什么产生内存泄露,ThreadLocalMap这样设计?其实有个线程池才会有这些对应的风险
如果代码中有很多if else 这样的语句,你会怎么来进行优化。说说对应的设计模式 。 工厂模式和策略模式的区别
当代码中存在大量的 if-else 语句时,可以考虑使用设计模式来提高代码的可维护性和可扩展性。以下是一些常见的设计模式,可以在此情况下进行优化:
- 策略模式(Strategy Pattern):策略模式允许你定义一系列算法,并将每个算法封装到独立的类中。通过使用策略模式,你可以将复杂的 if-else 逻辑替换为根据特定条件选择适当的策略对象。
- 工厂模式(Factory Pattern):工厂模式可以帮助你根据条件创建不同的对象实例。通过使用工厂模式,你可以将 if-else 语句移动到工厂类中,根据条件返回相应的对象,从而减少代码中的条件分支。
- 状态模式(State Pattern):状态模式用于管理对象的状态转换。如果你的代码中存在大量的状态判断,可以考虑使用状态模式来将状态逻辑封装到独立的状态类中,从而减少 if-else 语句。
- 观察者模式(Observer Pattern):观察者模式用于实现对象之间的一对多依赖关系。如果你的代码中需要根据不同的条件触发不同的操作,可以考虑使用观察者模式来将条件和对应的操作解耦,并根据条件通知相应的观察者。
- 链式调用模式(Method Chaining Pattern):链式调用模式可以使代码更简洁、可读性更高。通过将条件判断和方法调用链接在一起,可以减少 if-else 的嵌套,使代码更加流畅。
这些设计模式可以帮助你减少 if-else 语句的数量,提高代码的可读性、可维护性和可扩展性。然而,选择适当的设计模式取决于具体的业务需求和代码结构,需要根据实际情况进行评估和决策。
当代码中存在大量的连续的 if-else if-else 语句时,可以考虑使用以下设计模式来提高代码的可读性和可维护性:
- 策略模式(Strategy Pattern):策略模式可以用于将每个条件分支的处理逻辑封装到独立的策略类中。你可以为每个条件编写一个策略类,并在需要根据条件执行特定逻辑时,选择相应的策略类进行处理。这可以减少 if-else if-else 语句的嵌套,并提高代码的可扩展性和可维护性。
- 状态模式(State Pattern):状态模式可以用于管理对象的状态转换。每个条件分支可以表示对象的不同状态,而状态模式将状态的行为封装在独立的状态类中。通过切换对象的状态,可以避免长串的 if-else if-else 语句,使代码更加清晰和可扩展。
- 责任链模式(Chain of Responsibility Pattern):责任链模式可以用于构建一个处理请求的链。每个条件分支可以表示链中的一个处理器,而责任链模式将请求沿着链传递,直到找到能够处理该请求的处理器为止。这样可以避免多个连续的 if-else if-else 语句,使代码结构更加灵活和可扩展。
这些设计模式可以帮助你优化具有连续的 if-else if-else 语句的代码,并提供更好的可读性和可维护性。根据实际情况,你可以选择适合的设计模式来简化和优化代码结构。记住,选择合适的设计模式取决于具体的业务需求和代码逻辑。
- 说一说g1垃圾回收器。过程。g1的优势是什么?这100ms是什么都不能干?还是所有的用户线程都不能使用?触发老年代的条件是什么(老年代超过一定的百分比)。
- 什么情况下会产生gc的退化,即mixgc什么情况下退化为full gc
- java的原子变量,具体说一说。会和volatile一起使用吗?
- select for update 你是怎么用的?什么时候会锁表或锁行。一张表大概保存的数据量大概会存多少量。数据库太大了会有什么问题。表存在10000数据,加一个字段会有什么问题(可能会加锁锁表,导致时间过长,其他服务可能请求来了,直接把服务打挂了)
- 1到10000之间的质数。需要特别的算法
- 反问:
不会考察能力有多强,而是主要考察思维方面,思维的能力,潜力。表达、维度、思想。
对于源码,不要死看源码,可以看看作者在发布新的版本时,当时作者是怎么思考的、考虑点。这项技术能不能用到其他的地方,扩散。