Android大三提前批的钉钉和抖音面筋,阿里挂了HR面,抖音通过收获Offer

这一次的话,主要就是只投了钉钉和抖音两个部门,然后为了保险起见,让指导老师给我推荐了一个小公司,因为实在太想实习了,想着如果面试不上,总要有一个保底的机会。当然那家公司也挺nice的,我跟老总说了来意之后,老总直说让我全力冲,位置给我留着,所以在这里非常感谢吴总您对我的支持。

阿里巴巴 – 钉钉部门


阿里钉钉一面(面试时长80min)

  1. 自我介绍,对自己项目的介绍,架构图呈现

  2. 因为说自己以后的发展方向是音视频,所以问了我用过哪些现有框架

  3. 项目中的一些优化问题,MVC -> MVP,Handler的内存泄漏情况分析等,对MVP和MVVM的理解。

  4. 项目中的第三方库选择的问题,因为简历中写了我对第三方库选择的问题,比如选ObjectBox和greenDao的问题,图片加载框架问题

  5. HashMap和HashTable,引申ConCurrentHashmap的深入,version1.7和1,8的区别,以及高并发下HashMap发生的问题

  6. 四大启动模式,以及场景对应

  7. Handler的机制介绍,不存在消息时的IdleHandler的运作机制,为什么不能在子线程初始化问题

  8. 设计模式中的单例介绍,使用场景(Okhttp的Seesion存储等等),在线编写

  9. 快排算法

  10. OkHttp的源码分析,及整体架构的流程图绘制

  11. 四大组件的完整介绍,及深入,答了IntentService、LocalBroadcast

  12. 四大引用的问题和MVP框架相结合进行回答

  13. 网络中的响应码对大体进行回答,具体回答了200、404、500、304等

  14. View绘制流程问题,如何不使用xml,来实现中间位置的定位

  15. 事件分发机制流程讲解,以及如何实现单击事件和长按事件的判定

  16. 关于为什么选用mqtt协议的问题,优势,原理等等(没答上来,只说针对性做过测压,以及oceanlink和mqtt的对比)

阿里钉钉二面(面试时长30min)

  1. 自我介绍,优缺点的,以及未来希望的发展方向

  2. 目整体介绍,如何做到分压啊之类的问题

  3. 如果给我阿里、腾讯、头条、谷歌的offer的一个选择(不掺杂地域性的问题),首先直接否定了google我就的一个企业的商业模式进行分析。

  4. 我对钉钉这个产品的理解,我的回答是就的是钉钉前身的对标项目微信,已经后期转型的商业模式作出的分析,最后给出的我的结论是一个企业性质的办公软件

  5. 给出了钉钉一个mac平台的关于共享屏幕的耗CPU的问题

  6. 让我提问,提的是关于音视频发展方向的问题,具体是一个发展空间。

阿里钉钉三面(面试时长60min,但是hr面挂了)

  1. 自我介绍呗,还是一样,项目介绍,项目的优缺点对比

  2. 对MVC和MVP的理解,还有Handler的内存泄漏问题具体是什么,解决方案知道有什么,空数据的时候Handler的阻塞问题,但是我还是没在Looper的源码中找到,这里让我好好再看一下。

  3. 另外为什么使用MVP,他的优势是什么,内存泄漏是什么样的。

  4. http的长连接和短连接这两个概念,怎么去理解。我把它理解为持久化连接是什么,然后对http的3个版本的主要区别做一个介绍

  5. http一整个流程,什么Baidu.com输入,经过了什么。比较简单的问题了,必答内容DNS、TCP的三次握手、四次挥手,当然我再答一些IP路由、链路还有物理层的内容

  6. RecyclerView的一个复用机制,和ListView的一个区别在哪里

  7. HashMap、ConcurrentHashMap、Hashtable的问题,数据结构,线程安全啊之类的问题了,当然还是考了version 1.7和1.8。

  8. 一个app的启动流程,冷启动和热启动,我说底层我不太了解,只知道会有AMS去调一些东西,但是具体内容不知道,后面就是一些初始化和Activitiy生命周期问题了。

  9. 一到算法题三值之和求目标值,没写暴力,因为大家都会写,但是浪费了很多时间,刚开始是通过二值求和的方式,但是想做成O(n),其实不太可能,后面改成了O(n^2)

字节跳动 – 抖音部门


字节抖音一面(面试时长50min)

  1. 接口和抽象的理解

  2. 进程和线程的理解

  3. 各种单例创建的理解,以及DCL的同步机制为什么这么做,其他的设计模式知道的,以及应用场景。

  4. MVP和MVVM的理解,P层它主要做什么工作,你如何实现的M、V、P三层的通信。

  5. Handler的工作流程,Handler能否在子线程初始化以及用什么方案来替代Handler的在子线程初始化。

  6. JVM的组成成分,以及你对四大引用的理解

  7. 四大启动模式的启动方式以及场景分析,如过一个按钮对应页面跳转,如何点多次只进行一次跳转,两种方式回答

  8. 对http和https的理解

  9. Broadcast和LocalBroadcast他的一个区别

  10. Static变量他的用处是什么,具体应用场景。

  11. 一道两个链表的相加问题。思路+伪码实现(这里和阿里不一样,因为是牛客的平台,其实编码体验没有特别好,面试官让我用伪码来实现思路就可以了)

字节抖音二面(面试时长70min)

  1. 先自我介绍,问项目,老样子的MVP、MVC的理解,Handler中的内存泄漏

  2. 重点要讲Handler的内存泄漏,为什么会引起内存泄漏?(源码角度分析)解决方案有哪些?(说了三种)

  3. 为什么我的库中的MVP要基于范型实现,实现思路,还有泛形擦除(主要说了公共逻辑抽离这一块的内容)

  4. 对View自定义的一个了解

  5. 基于对网盘的理解,让我分析上传、下载这两块的内容,让我来做,会做什么样的处理,启发内容见下文:

  6. 关于上传方面:定时上传和立刻上传两方面的分析,针对的是数据量的大小

  7. 关于下载方面:线程安全(voliate / sync),线程池的使用,参数理解等等,断点重传的问题,应该怎么去进行实现。

  8. 还有整个的如果Activity突然断了,或者被kill了,如何对数据或者下载的位置进行保存

  9. ButterKnife原理实现

  10. 一道深度遍历和公共节点寻找的题(给出了复杂度极高的方案,面试官给了好的方案,但是问题停留在了公共节点寻找)

字节抖音三面(面试时长70min,已拿Offer)

  1. 问了项目架构,觉得项目有什么样可以升级的地方

  2. 泛型擦除,通配符的问题,主要做了extends和super的回答

  3. 从哪里了解的objectBox,和greenDao相比觉得他有什么样的优点,性能有进行过测试嘛(只看过官方数据),图像加载框架的选用。

  4. 从内存泄漏问题推倒到jvm的深层次问题,可达性分析的GC Root有什么,虚拟机栈和堆的关系,方法是怎么实现的。

  5. 问我觉得自己的优势是什么,说了我对一些框架的理解

  6. KotlinFlutter的一个了解程度的理解,还有为什么学习的一个现实原因,和学习方法。

  7. 数学题了,类似于斐波那契数列,但是关系式还没推倒出来。

  8. 用循环的方式去实现一个先序遍历,说的一些方案不用写代码。

以上就是我的学习成果,如果有什么我没有思考到的地方或是文章内存在错误,欢迎与我分享。

面试前我做的准备工作(大厂收割秘籍)


1.定制自己的简历(对标BATJ)

无论是什么行业,简历都是敲门砖,对于程序员来说,更应该着重准备,甚至要做到逐字推敲。关于简历,我个人有以下两点建议:

①尽可能突出自己的优势

一定要让看到你简历的人一眼就看到你自己所具备的优势,要学会突出重点,如你在上一家公司做出的贡献,就要写在显眼的位置进行突出,用颜色加深再好不过。如果你的优势是学历,那么学历就要放在第一页,因为HR在筛选简历时,一份简历往往只看那么几秒钟,你需要做到的就是让HR一眼看中你的简历。

②简

简历简历,之所以称为简历,就是需要把自己的个人信息和内容化繁为简,但是很多人都做不到这一点。我身边有一些朋友,写自己简历时,长篇大论,恨不得写出一篇800字作文出来,如果说你的简历长达6-7页,并不会给对方你有丰富经验的感觉,反而会让人一下子抓住不住重点。

另外,简历不能写成流水账,技术简历一般不超过3页,主要信息就包括个人信息(联系方式,学历等),专业技能,工作经历,项目经验等几个部分就好了,尽可能用精炼的语言描述,一个字能讲清楚的事,千万不要用两个字。

③描述自己做到了什么,而不是做了什么

很多程序员会在自己的项目或是技术栈里这样描述:在某项目,我负责xxxx,如重构,如优化。但实际上,面试官想要看到的是你在项目中,重构和优化带来了什么样的好处和效果,如果说性能提升了,那么提升的数据和情况是如何的,要一一描述出来,所以重点应该是“将项目做到了什么样子,做成了什么事”。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

设计模式学习笔记

设计模式系列学习视频

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

9184121)]

设计模式学习笔记

[外链图片转存中…(img-JQ1t8xMG-1713839184122)]

设计模式系列学习视频

[外链图片转存中…(img-zgO5ZUE8-1713839184123)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的Android游戏示例,这是一个猜数字游戏。 首先,我们需要创建一个新的Android项目。在Android Studio中,选择File -> New -> New Project,然后填写项目名称和包名。接下来,我们需要添加一个布局文件和一个Java类。 布局文件(activity_main.xml)如下所示: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Guess a number between 1 and 100:"/> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Guess"/> </LinearLayout> ``` 这个布局包含一个TextView,一个EditText和一个Button控件。TextView用于显示提示信息,EditText用于用户输入数字,Button用于提交用户的答案。 接下来,我们需要创建一个Java类(MainActivity.java),它将处理用户输入和游戏逻辑: ``` import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.util.Random; public class MainActivity extends AppCompatActivity { private int mNumber; private TextView mTextView; private EditText mEditText; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textView); mEditText = (EditText) findViewById(R.id.editText); mButton = (Button) findViewById(R.id.button); mNumber = new Random().nextInt(100) + 1; mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String input = mEditText.getText().toString(); if (input.isEmpty()) { mTextView.setText("Please enter a number!"); } else { int guess = Integer.parseInt(input); if (guess > mNumber) { mTextView.setText("Too high!"); } else if (guess < mNumber) { mTextView.setText("Too low!"); } else { mTextView.setText("You win!"); mButton.setEnabled(false); } } } }); } } ``` 这个类包含一个成员变量mNumber,它是一个随机生成的1-100之间的整数。在onCreate方法中,我们将布局文件中的控件与Java代码中的成员变量绑定,然后设置一个OnClickListener来监听Button的点击事件。在OnClickListener中,我们获取用户输入的数字,将其转换为整数,并比较它与mNumber的大小关系。如果用户猜的数字太高或太低,我们将在TextView中显示相应的提示信息。如果用户猜中了数字,我们将在TextView中显示“You win!”并禁用Button。 这是一个简单的Android游戏示例,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值