网站编程设计心得体会擅自给公司做网站有什么责任
2026/5/21 15:01:04 网站建设 项目流程
网站编程设计心得体会,擅自给公司做网站有什么责任,国内网站都要备案吗,jsp网站部署怎么做Java实习模拟面试 | 滴滴效能平台后端一面#xff1a;高并发、分布式锁与线程池深度连环问关键词#xff1a;Java后端实习#xff5c;JUC#xff5c;线程池#xff5c;分布式锁#xff5c;SpringBoot#xff5c;MySQL主从#xff5c;TCP三次握手#xff5c;Docker高并发、分布式锁与线程池深度连环问关键词Java后端实习JUC线程池分布式锁SpringBootMySQL主从TCP三次握手DockerHot100算法最近在准备后端开发岗位的实习面试特意模拟了一场「滴滴-效能平台」后端实习的一面场景。这场面试问题非常有代表性覆盖了并发编程、分布式系统、数据库、网络、容器化技术以及算法手撕等多个维度尤其对线程池和分布式锁的追问极为深入。下面以“面试官提问 我的回答”的形式还原整场面试并附上专业角度的解析希望能帮助正在备战Java后端实习的同学查漏补缺一、自我介绍面试官提问“先做个简单的自我介绍吧。”我的回答“您好我是XX大学计算机专业的大三学生目前主要学习Java后端开发方向。在校期间做过两个后端项目一个基于SpringBoot MyBatis的校园论坛系统另一个是使用RedisRabbitMQ实现的秒杀系统。我对高并发、分布式系统比较感兴趣也在LeetCode上刷了200题。这次投递滴滴效能平台是因为了解到该团队聚焦研发效能工具链建设希望能在真实业务中提升工程能力。”二、JUC体系有什么面试官提问“你提到了高并发那JUCjava.util.concurrent包里都有哪些核心组件”我的回答“JUC是Java并发编程的核心包主要包括线程池ThreadPoolExecutor、Executors工具类同步工具类CountDownLatch、CyclicBarrier、Semaphore并发集合ConcurrentHashMap、CopyOnWriteArrayList原子类AtomicInteger、AtomicReference等锁机制ReentrantLock、ReadWriteLock、StampedLockFuture相关FutureTask、CompletableFuture。这些组件底层大量使用了CAS、volatile、AQS等机制避免了传统synchronized的性能瓶颈。”三、项目中线程池使用的什么拒绝策略面试官追问“你在秒杀项目里用了线程池具体用的是哪种拒绝策略为什么”我的回答“我使用的是ThreadPoolExecutor.AbortPolicy也就是默认策略——直接抛出RejectedExecutionException。因为秒杀场景下如果系统已经过载继续接受新任务可能导致雪崩。与其让请求堆积或静默丢弃不如快速失败配合前端做降级提示保障核心服务稳定性。”补充思考面试后复盘其实也可以考虑CallerRunsPolicy让调用线程自己执行任务起到“反压”作用但需评估主线程是否能承受。四、线程池中任务执行出现异常如何捕获面试官继续追问“如果提交到线程池的任务抛了异常怎么捕获”我的回答“有两种方式使用Future.get()提交任务时用submit()而不是execute()返回Future调用get()会抛出异常自定义ThreadFactory或重写afterExecute()继承ThreadPoolExecutor覆写afterExecute(Runnable r, Throwable t)方法在其中处理异常。另外也可以在任务内部用 try-catch 包裹但这属于防御性编程不够优雅。”五、Tomcat的线程池执行流程是怎么样的我的回答“Tomcat 的线程池基于ThreadPoolExecutor实现其执行流程如下接收到 HTTP 请求后由 Acceptor 线程将 Socket 放入 Poller 队列Poller 线程监听 I/O 事件将可读的请求封装为SocketProcessor任务提交到StandardThreadExecutorTomcat 自定义线程池如果核心线程未满创建新线程否则尝试放入任务队列若队列满且线程数未达最大值则创建非核心线程若仍无法处理则触发拒绝策略Tomcat 默认是直接关闭连接。”六、Tomcat本质上是什么解决什么问题我的回答“Tomcat 本质是一个Servlet 容器实现了 Java EE 的 Servlet/JSP 规范。它解决了HTTP 请求到 Java 方法调用的映射问题并提供了生命周期管理、线程池、连接管理、静态资源处理等能力。简单说它把网络编程的复杂性封装起来让开发者只需关注业务逻辑。”七、分布式锁怎么实现的面试官开启连环追问模式我的回答“我项目中用的是Redis 分布式锁基于SET key value NX PX timeout命令实现保证原子性。value 是唯一标识如 UUID 线程ID用于防止误删。”追问1锁的过期时间怎么设置“根据业务执行时间预估比如接口平均耗时 200ms我会设为 2~3 秒留有余量。”追问2下游接口响应慢导致业务没执行完锁就过期了怎么办“可以使用看门狗机制Watchdog比如 Redisson 的自动续期功能只要业务还在执行就定期延长锁的过期时间。”追问3超时时间有没有考虑 Full GC 导致的 STWStop-The-World“……卡了一下说实话之前没考虑 GC 的影响。不过您提到 Goland应为 Go可能是口误实际指 Java 的 ZGC/ShenandoahSTW 极短但在传统 CMS/G1 下Full GC 可能停顿几百毫秒甚至秒级确实可能导致锁提前释放。后续我会在设置超时时间时结合 JVM 监控数据预留 GC 停顿的 buffer。”反思这个问题暴露了我对生产环境 JVM 行为理解不足值得深入学习。八、其他的分布式锁方案我的回答“除了 Redis还有MySQL通过SELECT ... FOR UPDATE或唯一索引实现但性能较差且依赖事务ZooKeeper利用临时顺序节点 Watch 机制天然支持公平锁和可重入但运维成本高。”九、ZK做分布式锁了解吗我的回答“了解。ZK 分布式锁的实现思路是所有客户端在/lock节点下创建临时顺序节点获取/lock下所有子节点判断自己是否序号最小如果是获得锁否则 watch 前一个节点前一个节点删除时收到通知再次判断是否最小。优点是强一致性、无死锁缺点是频繁创建/删除节点性能不如 Redis。”十、ConcurrentHashMap了解多少适用场景我的回答“ConcurrentHashMap 是线程安全的哈希表JDK8 后采用Node 数组 CAS synchronized 锁单个桶的设计相比 Hashtable 和 Collections.synchronizedMap 性能大幅提升。适用于高并发读多写少的场景比如缓存、计数器、配置中心等。”十一、SpringBoot常见注解我的回答“常用注解包括SpringBootApplication启动类RestController/Controller控制器Service/Repository业务层/数据层Autowired依赖注入ConfigurationBean配置类Value读取配置Transactional事务控制。”十二、Transactional 注解失效情况我的回答“常见失效场景有方法非 publicSpring AOP 基于代理private/package 方法不被拦截自调用同一个类中方法A调用带Transactional的方法BB 的事务不生效异常被捕获未抛出默认只回滚 RuntimeException 和 Error传播行为配置错误如REQUIRES_NEW在异常时不会回滚外层事务未启用事务管理器缺少EnableTransactionManagementSpringBoot 默认开启。”十三、IOC 和 AOP 通俗解释我的回答“IOC控制反转以前我们自己 new 对象现在交给 Spring 容器来创建和管理‘控制权’反转给了框架。AOP面向切面编程把通用逻辑如日志、事务、权限抽离出来像‘切片’一样动态织入到目标方法前后避免代码重复。”十四、哪些注解实现 AOP我的回答“Spring AOP 主要通过Aspect定义切面类Before/After/Around/AfterReturning/AfterThrowing定义通知类型Pointcut定义切入点表达式。另外Transactional、Async、Cacheable等也是基于 AOP 实现的。”十五、MySQL线上部署架构我的回答“一般采用主从复制架构一主多从主库负责写从库负责读实现读写分离使用 VIP 或中间件如 ShardingSphere、MyCat做负载均衡配合 MHA 或 Orchestrator 实现高可用故障切换重要数据还会做 Binlog 备份 定期全量备份。”十六十七、主从延迟问题Q16是否遇到主从延迟“项目是本地测试环境没遇到过。”Q17主从延迟如何获取“……没测过。诚实回答但我知道可以通过show slave status查看Seconds_Behind_Master字段。”复盘应补充也可通过对比主从 binlog position 或使用 pt-heartbeat 工具监控。十八、Redis线上丢失过数据吗我的回答“本地项目没丢过。但我知道 Redis 是内存数据库默认异步持久化RDB/AOF极端情况下如宕机可能丢失部分数据。生产环境通常会开启 AOF everysec 同步配置主从 哨兵/Cluster关键数据双写 DB 做兜底。”十九、三次握手能否改成两次或四次我的回答“不能改成两次会导致历史连接请求突然到达服务器造成资源浪费经典‘旧 SYN 攻击’问题。四次理论上可行但冗余三次已是最小可靠建立连接的次数四次只是多一次确认无实际收益。所以三次是可靠性和效率的最佳平衡。”二十、TCP 和 UDP 使用场景我的回答TCP可靠、有序、有连接适用于文件传输、HTTP、数据库连接等要求数据完整性的场景UDP无连接、低延迟、不可靠适用于视频会议、直播、DNS 查询、IoT 传感器上报等容忍少量丢包的场景。二十一二十三、Docker 相关Q21Docker 和虚拟机区别“虚拟机通过 Hypervisor 虚拟化硬件每个 VM 有完整 OSDocker 共享宿主机内核通过 Namespace 和 Cgroups 隔离进程更轻量。”Q22为什么 Docker 启动快“因为不需要启动 Guest OS直接运行应用进程秒级启动。”Q23镜像分层了解吗“……不太清楚。诚实但知道镜像是由多层只读层叠加而成修改时用 Copy-on-Write 机制。”复盘镜像分层是 Docker 核心特性每层代表一个指令变更利于复用和增量构建。二十四、K8s 了解吗“知道 K8s 是容器编排系统能管理 Pod、Service、Deployment 等资源支持自动扩缩容、滚动更新、服务发现。但没在项目中实际使用过。”手撕算法Hot100 - 出现次数超过一半的数字题目给定一个大小为 n 的数组找到众数出现次数 n/2。第一版哈希表publicintmajorityElement(int[]nums){MapInteger,IntegermapnewHashMap();for(intnum:nums){map.put(num,map.getOrDefault(num,0)1);if(map.get(num)nums.length/2)returnnum;}return-1;}时间 O(n)空间 O(n)。面试官要求O(n) 时间 O(1) 空间在提示下想到Boyer-Moore 投票算法publicintmajorityElement(int[]nums){intcandidate0,count0;for(intnum:nums){if(count0){candidatenum;}count(numcandidate)?1:-1;}returncandidate;// 题目保证存在众数}原理众数比其他所有数加起来还多抵消后必然剩下众数。总结与反思这场模拟面试让我意识到基础知识必须扎实如 JUC、线程池、分布式锁细节生产意识要提升GC、主从延迟、Redis 持久化等不能只停留在理论诚实比瞎编更重要不会就说“没接触过”但要表现出学习意愿算法要灵活切换思路熟悉经典解法如投票算法能救命。希望这篇复盘对大家有帮助欢迎点赞收藏也欢迎在评论区交流面试经验

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询