泰达建设集团网站,wordpress从入门到精通pdf,网站合作推广方案,淄博网络公司曝光1 自我介绍
2 快手实习
2.1 说说你在实习期间遇到的挑战、收获
#xff08;1#xff09;在设计模式的应用能力上#xff0c;有了很大的提高#xff0c;使用模板设计模式#xff0c;架构实例反向同步到架构定义#xff0c;使用了策略模式
#xff08;2#xff09;
…1 自我介绍
2 快手实习
2.1 说说你在实习期间遇到的挑战、收获
1在设计模式的应用能力上有了很大的提高使用模板设计模式架构实例反向同步到架构定义使用了策略模式
2
2.2 讲讲反向同步的背景为什么要这么做呢
答
2.3 讲讲你遇到的比较有挑战性的问题讲讲过程中你怎么思考这个问题的
答权威接线和初始的接线的状态的比较判断刚开始一下子把所有的数据中心的数据都拉到本地内存中发现有OOM问题后面逐个同步单个数据中心的数据同步的粒度缩小了这样的话就能够同步完成了。
2.4 你们OOM之后是怎么进行分析定位问题的
OOM分析之问题定位
答有日志报错通过OOM的报错信息java.lang.OutOfMemoryError: Java heap space我们知道是堆发生了OOM了因为我们事先设置了-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/path_to_directory参数配置了发生OOM时的内存快照转储路径所以从这个指定的路径中查找到相应的OOM文件再通过MAT工具发现了这里有一个列表特别大所以我们分析就知道了这个代码问题出在了哪
3 中泓在线实习
3.1 你负责的这个同步服务是怎么做的呢
答jdbc原生接口支持几百张表的同步避免创建大量的同步表利用数据表进行隔离多线程同时进行同步操作加速同步过程增量同步在夜间进行同步操作
3.2 你这个表级别的隔离和利用线程池提升传输效率是怎么实现的呢
答
1外部csv文件包含了需要需要同步的表的表名每一行数据包含了表名、源库名、目的库名,服务一启动就会读取csv文件然后将其放入到map当中
2主线程读取这个map中然后遍历这个map将这个map中的表名源库名目的苦命放入到创建的Runnable对象当中这个runnable对象负责写具体的表级别的同步逻辑然后再调用已经创建好的线程池对象的execute方法就可以执行这个任务了这个任务后续是排队还是直接执行就看自己使用的哪个类型的线程池了。
3.3 你这个自定义线程池是怎么创建的
答通过ThreadPoolExecutor创建的给这个里面传入了核心线程数最大线程数阻塞队列保活时间以及自定义线程工厂
3.4 那你线程里的线程和你要处理的数据表之间是一个怎么样的关系
答一一对象一个线程处理一张表
3.5 你线程池里面线程的数量和表的数量是什么关系呢
答当时想的是核心线程数设置为20这是根据公式核心线程数cpu核数(线程等待时间/线程执行任务的平均时间1)得来的最大线程数设置表的数量然后再使用一个阻塞队列这里的非核心线程的数量也不敢设置的太大因为数据同步涉及到大量的数据迁移任务所以如果同步的过程中同时从mysql中拉取了太多的数据时可能会造成OOM
如果待同步的表数据量基本不大而且后面做的是修改操作则同步操作使用cachedThreadPool比较好。
3.6 如果是IO密集型的需求cpu空闲时间会很长怎么设计线程池比较好
因为这是一个IO密集型的需求一个任务的IO时间很长也就是说在网络IO期间会被阻塞cpu空闲时间会很长
对于IO密集型的任务由于线程在等待IO例如磁盘操作或网络请求时不会消耗CPU可以使用较多的线程来提高系统的吞吐量。但是线程本身不是免费的因为它们需要内存例如线程栈并增加了线程调度的开销。因此线程数量也不能过多。
以下是针对IO密集型需求设计线程池的一些建议 线程数设置 可以考虑将线程数设置得相对较大常见的策略是CPU核数 * 2 或者更高。也可以考虑根据系统的实际IO等待时间和CPU时间的比例来动态调整线程数。 选择合适的队列 使用一个有界队列例如ArrayBlockingQueue可以防止任务过多积压导致内存溢出。根据实际的业务负载合理选择队列大小。队列太大可能会消耗更多的内存太小则可能导致过多的任务被拒绝。 线程的存活时间 对于IO密集型的任务线程的存活时间可以设置得相对较短这样可以更快地释放不再需要的线程资源。 拒绝策略 当队列满且线程数达到最大值时需要一个策略来处理新进来的任务。默认的策略是抛出RejectedExecutionException但也可以选择其他策略例如调用者运行策略让提交任务的线程自己去执行这个任务。 使用任务优先级 如果有些IO任务比其他任务更为紧急可以考虑使用优先级队列。 监控与调优 监控线程池的关键指标如队列长度、线程数、CPU使用率等。这些信息可以用来判断是否需要调整线程池的配置。根据业务高峰期调整线程池的配置例如夜间IO需求较低时可以减少线程数。
总之对于IO密集型的需求主要的目标是最大化系统的吞吐量。这通常意味着需要使用较多的线程并合理配置线程池的各项参数。
3.7 你觉得线程池的线程是在什么时机被创建进去的
答核心线程可以在线程池被声明出来时就被创建这样的话相当于是线程预热的作用任务一来了就能用这是通过preStart参数控制的
3.8 你觉得一个线程的状态有哪些呢
答运行、就绪、阻塞、终止
Java中一个线程的生命周期包括多个状态。下面是Java线程的主要状态 新建NEW 当我们创建一个线程对象但还没有调用它的 start() 方法时线程处于此状态。 可运行RUNNABLE 线程对象已经调用了 start() 方法但线程调度器还未选择它作为当前执行的线程时它处于可运行状态。这也包括了线程正在Java虚拟机内部运行的状态。 阻塞BLOCKED 线程正在等待监视器锁比如当一个线程调用了一个同步方法或同步块并且当前同步方法或同步块已被另一个线程所持有那么这个线程进入BLOCKED状态。 等待WAITING 线程因调用了以下方法之一而处于等待状态 Object.wait()Thread.join()LockSupport.park() 这是一个不限时的等待线程需要被其他线程显式地唤醒。 超时等待TIMED_WAITING 线程调用以下方法之一并指定了超时参数那么线程会处于这个状态 Thread.sleep(long millis)Object.wait(long timeout)Thread.join(long millis)LockSupport.parkNanos() 或 LockSupport.parkUntil() 在超时时间达到或其他线程唤醒它之前线程会一直处于此状态。 终止TERMINATED 当线程的 run() 方法完成或线程被中断时线程处于此状态。
在Java编程中你可以使用 Thread.getState() 方法来获取一个线程的当前状态。这对于调试和线程管理是非常有用的。
3.9 如果发现cpu的使用率非常高你会重点关注什么状态的线程呢
答如果说线程是阻塞态它应该不怎么占用cpu被挂起到了阻塞队列中所以应该重点关注运行态的线程
3.10 如果我发现某一个应用的线程数一直在持续缓慢的增长然后这个时候访问量也没有太大的波动而且你的cpu和负载也没有太大的波动你会怎么分析通过什么样的方式分析呢你会关注什么状态的线程我答的不对
答
答当一个应用的线程数持续缓慢增长但访问量、CPU和负载都相对稳定时可能的情况有 线程泄露有些线程可能没有被正确关闭导致随着时间的推移线程数量逐渐增加。这在使用自定义线程或线程池时可能会发生。 第三方库/组件可能使用的某个库或组件在内部创建了线程并且没有正确地管理它们。
为了进一步分析 线程堆栈分析可以使用Java的内置工具 jstack 来查看应用的线程堆栈。这将为每个线程提供一个快照显示线程在做什么。通过这个工具可以识别出不断增长的线程是做什么的是由哪部分代码启动的。 关注状态尤其是 WAITING 和 TIMED_WAITING 的线程。虽然这些线程可能不会消耗大量的CPU但它们可能是因为等待某个资源或某个条件而被阻塞导致线程数增长。 监视工具使用如VisualVM, JProfiler等工具可以实时监控线程的创建、状态和销毁。这可以帮助识别线程创建的模式和可能的线程泄露。 日志审查查看应用的日志检查是否有异常、错误或其他相关信息这可能与线程的行为有关。 代码审查检查代码中所有创建线程或线程池的地方确保线程在完成其任务后被正确关闭。
结论当线程数持续增长但其他指标相对稳定时很可能是线程管理问题或线程泄露。关键是找到哪些线程不断被创建并为什么它们没有被正确地关闭。
3.11 你是怎么理解火焰图的横向和纵向能解决我刚刚说的问题嘛
答横向表示一个线程执行时花费的cpu时间纵向表示方法的调用栈因为你刚刚说的是线程不怎么占用cpu即任务可能执行完了但是没有被正确释放所以火焰图是不适用于解决这个问题的
4 数据结构
4.1 一个元素都不相同的一维数组先单调递减后单调递增请找出其中的最小值要求logn的复杂度
分析可以参考lc162. 寻找峰值和lc33. 搜索旋转排序数组
int getMin(int[] a){int l1,ra.length-2;while(lr){int m(lr)/2;if(a[m-1]a[m]a[m1]a[m])return a[m];if(a[m-1]a[m]){lm1;} else if(a[m1]a[m]){rm-1;}}return a[l];
}4.2 一个存在部分元素相同的一维数组先单调递减后单调递增请找出其中的最小值要求logn的复杂度 5 反问
5.1 要求实习多久
答两个月左右最好马上过来双方加深一下了解 5.2 还有一轮嘛
答还有一轮hr和面试一起跟你聊
5.3 综合测评可以等hr面之后完成嘛
答hr可能会看
5.4 我进去之后是负责哪一块业务呢
答一个是消费医疗主要阵地在淘宝和支付宝里面另一个是线上线下的购药场景近期可能有一些医疗大模型的语料的清洗和生产你实习期间可能会在大模型这一块做正式的话可能会根据个人意愿
5.5 base在北京嘛
答北京和杭州都可以
5.6 多久出结果呢
答你已经过了
5.7 三面还会聊技术嘛
答对然后hr也会做一些沟通