当前位置: 首页 > 面试经验 >

华为OD,Java面经,东莞

优质
小牛编辑
145浏览
2023-04-26

华为OD,Java面经,东莞

机试 280

2023-03-31 一面

1、有哪些集合

  • conlletion: set、list(arraylist, linkedlist) 、queue
  • map: hashmap、hashtable、treemap

2、什么情况下用什么集合

1、改查选择 ArrayList,因为数组能够随机访问,效率高

2、如果有先进先出特点的,就用queue

3、如果数据是一对一对的,可以考虑map

4、如果要求数据不重复,可以用set

3、多线程集合使用依赖哪些类

  • 1、hashtable
  • 2、concurrenthashmap
  • 3、vector
  • 4、stack

4、多线程下操作HashMap会有什么问题,这样通过什么类来实现

1、1.7的就会出现扩容死链,链表next指针死循环

2、1.7和1.8都容易出现数据错乱、丢失数据

3、可以使用线程安全的集合,例如hashtable、concurrenthashmap、stack

5、多线程实现方式,比较,使用场景

继承Thread类,实现Runnable接口,实现Callable接口

比较:     实现Runnable 接口比继承Thread 类的方式更好,避免由于Java单继承带来的局限性

使用场景:后台任务;异步处理;分布式计算

6、有哪些锁,怎么避免死锁

公平锁、非公平锁、可重入锁、独享锁、共享锁、互斥锁、乐观锁、悲观锁

避免死锁:

1、加锁顺序(线程按照一定的顺序加锁)

2、加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

3、死锁检测    

7、sql 怎么优化

插入优化

  • 1、合并sql语句
  • 2、在事务中进行插入处理
  • 3、数据有序插入

查询优化

  • 1、尽量使用索引,避免全表扫描     - 避免where 语句中判断null、使用不等于比较、使用or、使用函数等操作,这会导致全表扫描
  • 2、不要用select * ,用具体字段替代
  • 3、用 exists代替 in
  • 4、尽量使用表变量来代替临时表
  • 5、避免频繁创建和删除临时表

8、生产问题排查,举例说明

生产环境有相关监控,监控cpu、内存等信息,当过高时就会发送告警邮件

比如内存使用过高导致cpu满载

1、通过top命令查看负载高的cpu进程

2、进一步查找负载高的进程中的线程

3、然后导出内存日志,分析堆栈情况

最后一道算法题

内容:给定一组名字字符串,名字和名字之间逗号隔开,

按照票数高低的顺序输出名字空格票数,相同票数的按照字母升序输出

输入:xiaoming,xiaozhang,xiaoli,zhangsan,xiaoming

输出:xiaoming 2,xiaoli 1, xiaozhang 1,zhangsan

构建一个实体类数组(没构建成功,经过面试官提示,加一个判断完成),然后自定义排序,结果通过

2023-04-01 技术二面

先一道算法题

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
提示:
     1 <= target <= \(10^9\)
     1 <= nums.length <= \(10^5\)
     1 <= nums[i] <= \(10^5\)
     

双重循环暴力法通过,面试官提示可用前缀和优化

1、运维、开发、测试 更喜欢哪个?

开发,比较有挑战性

2、java相关的技术了解哪些?

redis、rabbitmaq

3、项目中什么场景使用rabbitmq?

异步处理

场景:用户注册,用手机号注册,填写信息后发送短信验证码,填写验证码后注册成功。

应用解耦

场景:用户下单后,订单系统需要通知库存系统

4、rabbitmq 和 kafka的 区别

没说上来

5、数据库有了解嘛?说一下mysql索引?

    1.主键索引     2.唯一索引     3.普通索引     4.空间索引     5.全文索引

6、在做数据库查询时有没有遇到过性能瓶颈?

select 字段和索引顺序不一致,导致oom

7、怎么做优化

查询优化: 尽量使用索引,避免全表扫描

避免where 语句中判断null、使用不等于比较、使用or、使用函数等操作,这会导致全表扫描

插入优化:

1、合并sql语句

2、在事务中进行插入处理

3、数据有序插入

8、mysql 中用 #{} 和 ${} 的区别?

#{}是预编译、是一个占位符

${}是字符串、是一个拼接符。

使用#{}可以有效地防止SQL注入,能够提高系统安全性

10、java设计模式有了解嘛,说一下?

⼯⼚模式、单例模式、匹配者模式

11、什么情况适合用单例模式?

1、有频繁实例化然后销毁的情况,也就是频繁的 new 对象,可以考虑单例模式;

2、创建对象时耗时过多或者耗资源过多,但又经常用到的对象;

3、频繁访问 IO 资源的对象,例如数据库连接池或访问本地文件;

12、对springBoot 依赖注入有了解嘛?

依赖注入是指在Spring创建对象的过程中,把对象依赖的属性注入到对象中

不用自己去创建对象,但必须描述怎么创建对象,在配置文件中配置哪些组件需要哪些服务

会有ioc容器自动将它们装配到一起

二面发挥不好

2023-4-4 HR面:

先自我介绍,然后问了下工作情况和一些基本信息,最后问了期望薪资

2022-4-6 技术三面:

先一道算法题

/**
     * 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
     * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
     * 判断你是否能够到达最后一个下标。
     * <p>
     * 示例 1:
     * 输入:nums = [2,3,1,1,4]
     * 输出:true
     * 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
     * <p>
     * 示例 2:
     * 输入:nums = [3,2,1,0,4]
     * 输出:false
     * 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
     */
     

dfs 遍历,找不到就回退上一步,继续找,直到找到,面试官后面给一组用例,全部通过

然后问一些八股文,然后深入到项目,具体问题忘了

2023-4-13 主管面

主管忙,比较难约,过了一周才面上

问些个人信息、离职原因、之前工作相关、加班的一些问题

总结:

从去年开始,学校不是目标院校,去年9月份投了云计算,面试通过,后面没hc了,就没能进去。

今年2月裁员,就又投一次,这次是数字能源,4-19收到offer,确定了4-27入职。

没工作两月,自我焦虑挺折磨人的,当前环境也确实找工作不容易。

#华为od#
 类似资料: