乐于分享
好东西不私藏

厦门实习|华为招暑期软件开发实习生岗位 |200-300元/天

厦门实习|华为招暑期软件开发实习生岗位 |200-300元/天
✨职位信息概览

华为招暑期软件开发实习生岗位,200-300元/天,工作地址:厦门思明区华为办事处(磐基名用品中心店),学历不限

📋岗位职责

1、负责产品/平台的软件需求分析、架构设计、代码开发、单元测试、集成测试、静态检查、本地构建、测试环境搭建、问题定位、资料开发等工作; 2、负责相关系统/模块的代码看护及重构,持续优化提升代码质量; 3、负责后端故障诊断和项目支持技术活动,包括产品维护、疑难问题解决、重大项目支撑等。

✅任职要求

1、计算机、软件、通信等相关专业; 2、热爱编程,基础扎实,熟悉掌握但不限于JAVA/C++/C/Python/JS/HTML/GO/Rust等编程语言中的一种或数种,有良好的编程习惯; 3、具备独立工作能力和解决问题的能力,善于沟通,乐于合作,热衷新技术,善于总结分享,喜欢动手实践; 4、对数据结构、算法有一定了解。

加分项:

  • 熟悉TCP/IP协议及互联网常见应用和协议的原理
  • 有IT应用软件、互联网软件、IOS/安卓等相关产品开发经验,不满足于课堂所学,在校期间积极参加校内外软件编程大赛或积极参与编程开源社区组织
  • 熟悉JS/AS/AJAX/HTML5/CSS等前端开发技术

📸招聘详情

💡应聘技术问题

问题:"说说HashMap的底层实现原理,JDK 1.8做了哪些优化?"

参考答案:

HashMap底层是数组+链表,key的hashCode经过扰动函数处理后得到数组下标。JDK 1.8改了不少东西:链表长度超过8且数组达到64时转红黑树,查找从O(n)变成O(logn);头插法改成尾插法,避免多线程扩容时链表成环;hash计算也简化了,高16位和低16位做异或,碰撞概率更低。实际用的时候记得设好初始容量和负载因子,别让Map动不动就扩容。

问题:"Redis有哪些常用数据结构?各自适合什么场景?"

参考答案:

Redis五大数据结构各有各的用法。String用来做缓存、计数器、分布式锁;List是双向链表,做消息队列或者"最新N条"这种场景;Hash适合存对象,比如一个用户的所有属性塞一个Hash里;Set支持交集并集,算共同好友、打标签直接用;ZSet带score,做排行榜和延时队列最方便。实际项目里String存session、Hash存用户资料、ZSet做排行榜,基本上就是这么配的。

问题:"MySQL索引为什么用B+树而不用B树或红黑树?"

参考答案:

选B+树主要是为了减少磁盘IO。B+树的非叶子节点只存键值不存数据,一个磁盘页能塞下更多键值,树就更矮,IO次数就少。叶子节点之间用指针串成链表,范围查询沿着链表扫就行,不用往上回溯——数据库的范围查询又特别频繁。红黑树是二叉的,数据量一大树就很高,IO次数扛不住。MySQL里一个三层的B+树大概存两千万条记录,查一次也就2-3次磁盘IO。

问题:"你在项目中是怎么保证代码质量的?做过哪些代码重构?"

参考答案:

代码质量不是靠一个环节就能保证的。写代码时统一命名和风格,跑SonarQube做静态检查,把明显的问题先拦住。每个模块写单元测试,核心逻辑覆盖率至少80%。提交之前过一遍Code Review,看看边界条件和异常处理有没有遗漏。

重构这块我举个自己的例子:接过一个老模块,方法动辄几百行,逻辑全搅在一起。我按单一职责拆方法,大段if-else用策略模式替代,重复的数据库操作抽成公共方法。改完跑测试全过,代码量少了快40%,后面加新功能也不用再在几百行的方法里找插入点了。

问题:"假设你负责的线上服务突然响应变慢,你会怎么排查定位?"

参考答案:

第一反应去看监控大盘,搞清楚是单个接口还是整体都在变慢。单个接口慢的话,直接查慢SQL日志和缓存命中率,十有八九是查询拖的。整体变慢就看机器资源:CPU打满(可能死循环或频繁GC)、内存不够(可能泄漏)、网络IO卡住。

说一个我碰到的实际例子:服务响应从50ms飙到2秒,最后查出是前一天上的查询没走索引,数据量涨起来之后变成全表扫描。EXPLAIN一看type是ALL,加了个索引就恢复了。这事儿的前提是监控和日志的完善,不然出了问题连从哪查起都不知道。

🎯应聘面试准备

问:想应聘上述岗位,需要做哪些准备?

答:

简历优化

1.核心信息前置

  • 学历背景:
     学历不限,计算机、软件、通信等相关专业
  • 工作经验:
     暑期实习岗,有校内项目或开源贡献是加分项
  • 技术栈:
     Java/C++/C/Python + MySQL + Redis
  • 意向岗位:
     软件开发实习生

2.匹配岗位关键词

  • 技术栈:
     Java, C++, C, Python, MySQL, Redis, JavaScript, HTML, Go, Rust
  • 工程能力:
     需求分析, 架构设计, 单元测试, 集成测试, 代码重构, 故障诊断
  • 工具与平台:
     Git, 静态检查工具, CI/CD构建工具
  • 能力标签:
     独立解决问题, 团队协作, 技术分享, 动手实践

技能梳理

编程语言(至少精通一门):

  • Java:集合框架、并发编程(线程池、锁机制)、JVM基本原理
  • C++:指针与内存管理、STL容器、面向对象设计
  • Python:基础语法、常用标准库、脚本编写能力

数据库与缓存:

  • MySQL:索引原理、事务隔离级别、慢查询优化
  • Redis:五大数据结构及使用场景、持久化机制、缓存击穿/穿透/雪崩的处理方式

网络与基础:

  • TCP/IP协议栈、三次握手四次挥手
  • HTTP/HTTPS原理,常见网络问题怎么排查
  • 数据结构和算法:数组、链表、树、哈希表,排序查找是底线,动态规划和贪心能做更好
  • 操作系统:进程线程区别、内存管理基本概念

面试准备

经典问题

  • 手写反转链表、二叉树遍历、LRU缓存实现
  • HashMap底层原理、ConcurrentHashMap线程安全怎么做的
  • Redis缓存击穿、穿透、雪崩各自是什么,怎么防

系统设计

  • 短链接生成服务怎么设计
  • 百万并发的消息队列大概怎么搭
  • 秒杀系统架构的核心思路

项目经验准备

  • 准备1-2个核心项目的详细介绍,包括:
    • 项目背景和目标
    • 使用的技术和方法
    • 遇到的挑战和解决方案
    • 项目成果和收获
  • 如有开源社区贡献经历(PR、Issue),整理好能说清楚来龙去脉
  • 校内编程竞赛或课程设计项目,突出自己负责的模块和技术选型