【实习之路】腾讯、小米日常实习生面试经历分享——小米篇


前言

最近在投递实习岗位,面试了腾讯跟小米两家公司,分享一下经历。


正文——小米篇

投递渠道:BOSS直聘。

BOSS直聘上有个小米的面试官私聊我,岗位是Android开发实习生,由于我是学Java的,Android跟Java还是有些相关的,就在10月25号投递了。

一面经验

面试时间:10月28号下午4点。

一个北京的电话打给我了,问我什么时候方便面试,我说现在,然后过了一会就开始了。

面试内容

  • 简单做一下自我介绍
  • 提了一下简历中的小工具是用什么语言开发的(Java)
  • 确认了一下我的岗位意向是不是Android开发(简历上写的是Java意向)
  • String、StringBuilder、StringBuffer的区别(参考这篇博客戳这里
  • equals和==的区别(参考这篇博客戳这里
  • equals和hashcode有什么关系呢
  • 介绍一下static关键字
  • final和finally的区别(参考这篇博客戳这里
  • Java基本数据类型有哪些(boolean、byte、short、int、long、float、double、char)
  • 为什么要分基本数据类型和非基本数据类型
  • int和Integer有什么区别(参考这篇博客戳这里
  • int可以为null吗(答案是不可以的,可以自己试试看)
  • 重写与重载的区别(参考这篇博客戳这里
  • Java有哪些集合(根据继承关系回答)
  • 那你介绍一下ArrayList和LinkedList的区别(参考这篇博客戳这里
  • 那如果要线程安全的话可以使用什么(因为我上面同时提到了都不是线程安全的,如果要线程安全的话可以使用Vector,但是Vector的锁比较笨重,效率低下,可以使用Collections.synchronizedList转换为线程安全)
  • ArrayList的扩容机制
  • 假设有大量的数据需要add到ArrayList中,这时候就会不断地扩容,扩容会影响性能,那如何避免呢(一开始没想出来,后面面试官直接跟我说可以在初始化的时候输入一个比较大的初始容量)
  • 讲一下ArrayList具体是怎么扩容的(看一下源码就明白啦)
  • 介绍一下wait()和sleep()的区别(主要从类、是否释放锁、唤醒角度讲)
  • 那你介绍一下强引用、软引用、弱引用、虚引用的区别(我那时候忘记了,面试官就跳过了,不过可以参考这里戳这里
  • 问了我的Android基础咋样(好多都忘了,面试官也跳过了)
  • 那我问你一些算法的吧,看你之前参加过蓝桥杯(orz,都没进过国赛)
  • 讲一下链表的反转吧(我是从使用额外空间到不使用额外空间讲的,额外空间的话,可以使用一个List,遍历链表同时添加元素到List中,最后倒叙遍历List,将其元素添加到新的链表中;不使用空间的话,可以用尾插法的方法对节点进行添加)
  • 单向链表如何拿到倒数第n个值(可以参考这篇博客【LeetCode】详解删除链表的倒数第N个节点
  • 设计一个方法,输入参数为n,返回2的n次方(最暴力的就是for循环n次,然后每次乘2,优化的话一时半会想不出来,面试官提示用分治法,比如n=8,不必计算8次,因为28可以拆成24 * 24;最优解就是用位运算左移了)
  • 使用过git吗,界面还是命令行(命令行),用了哪些命令行(把印象中的都说了一下,比如什么init、add、commit、push、pull、clone、log、merge、reset)
  • 除了merge,还有哪些合并代码的命令行,了解过rebase吗(没有了解过)
  • 介绍一下你的YY实习经历吧,平常都做了什么
  • 可以实习的时间,能实习到什么时候

面试总时长:28分37秒

整理了之后才发现原来问了这么多问题,因为大部分问题都是我之前写过博客的,所以回答比较快,基本上面试官一问我就答出来了。

二面经验

面试时间:10月28号下午7点。

一个小米的面试官加了我微信,问我什么时候方便面试,我说现在,然后就出去外面开始面试了(当时正在上课,外面的风挺冷的)

PS:由于微信电话没有录音,只能凭印象来写面试内容

面试内容

  • 给你一个链表,如何获取第n个节点(我一开始说直接遍历n次)
  • 那时间复杂度多少,能不能改成O(1),允许对链表进行修改
    (外面风大,一开始没听清楚,就跟面试官说了一下,面试官很惊讶我竟然在这么冷的外面面试,他说其实可以不用那么急的,换个时间也是可以的。)
    (想了一下可以加个前缀,但是后面的思路就卡住了,面试官一直给我提示,但是最后还是没想出来)
  • 给你一个单向链表,如何删除指定节点,时间复杂度O(1)
    (如果没记错的话,应该是问这个问题,还是答得不好,面试官表示理解,说我在外面没有纸和笔,也比较冷)

后面就是聊天环节了

  • 用过git吗(用过)
  • 好的,用过Linux吗(用过)
  • 好的,那如何如何查找文件(find)
  • 好的,学Android会比较累,其实就是加班多(我:加班多没事啊,我之前在YY平均一天13小时)
  • 有点忘了。。。
  • 那基本上就这样吧(我:只问这么少吗?)
  • 因为上一面的面试官说你基础还不错,我就默认你pass通过了(我:可以可以,那还有下一面吗)
  • 没有了,其实决定权在我这,主要是目前比较缺人(我笑:哈哈,可以可以)
  • 忘了。。。

面试总时长:16分19秒

二面其实难度不大,只是我这边有点问题,面试官也比较友好。


总结

小米面试都挺好的,有不懂的话或者解释不到位面试官会给相关的提示,算法的难度比较简单(orz,但是二面的算法我有点懵)。虽说是Android岗位面试,但是问的Java也挺多的(可能是因为我不会Android)。

今年的Android跟IOS都比较缺人,那时候投递小米的时候跟面试官说我没有Android经验,面试官说基础好就行,可以进去再学(可见有多么缺人)。

哦对了,本来想顺便分享一下腾讯的实习经历,结果发现有点晚了(今天从广州去深圳现场面试,还是挺累的,想早点睡),就放在下一篇文章【实习之路】腾讯、小米日常实习生面试经历分享——腾讯篇,感兴趣的同学可以先关注一下我,避免迷路了~

  • 12
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
1. 请解释一下C语言中的指针。 指针是一个变量,用来存储内存地址。通过指针,可以间接访问和修改内存中的数据。C语言的指针灵活性很高,常用于动态分配内存、传递参数、访问数组等操作。 2. 如何定义一个常量指针? 可以使用const关键字定义一个常量指针。例如:const int *p; 这样定义的指针p指向的值不可修改,但可以通过修改p来指向其他地址。 3. 请解释一下C语言中的结构体。 结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量,用来表示一个具有多个属性的对象。通过结构体可以将相关的数据组织在一起,提高程序的可读性和可维护性。 4. 如何在结构体内定义一个指针变量? 可以在结构体内定义一个指针变量,该指针变量可以指向另一个数据类型的值。例如:struct Student { int *p; }; 5. 请解释一下C语言中的动态内存分配。 动态内存分配是指程序在运行时根据需要分配和释放内存。C语言提供了四个函数:malloc、calloc、realloc和free来进行动态内存分配与释放。 6. 如何动态分配内存? 可以使用malloc函数动态分配内存。例如:int *p = (int*)malloc(sizeof(int)); 这样可以在堆中分配一个int类型大小的内存,并将该内存地址赋给指针p。 7. 如何释放动态分配的内存? 可以使用free函数释放动态分配的内存。例如:free(p); 这样可以释放指针p所指向的动态内存。 8. 列举C语言中的一些常见数据结构。 常见的数据结构包括数组、链表、栈、队列、树、图等。 9. 请解释一下C语言中的递归。 递归是指函数自己调用自己的过程。递归可用于解决问题的分解与归纳,适用于解决问题的过程可以划分为多个相似的子问题。 10. 请解释一下C语言中的位运算。 位运算是对二进制数的操作,包括按位与、按位或、按位异或等操作。位运算常用于位掩码、位操作等场景。 以上是前10道C面试题及答案。希望对您有所帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值