耗时三个月,剑指字节,渣本Android生逆袭大厂,Android原生开发如何深入进阶

3、Android相关:

主线程Looper一直循环查消息为何没卡主线程?RecyclerView相对ListView区别?好像还有Bitmap resize相关,就是设置option,然后decode→这里还有些我基本都是随口答对的,已经忘了2333~

反正都是中级(或稍偏高级)Android工程师必掌握原理机制~

4、项目相关:

用MultiDex解决何事?其根本原因在于?Dex如何优化?主Dex放哪些东西?主Dex和其他Dex调用、关联?Odex优化点在于啥?Dalvik和Art虚拟机区别?多渠道打包如何实现(Flavor、Dimension应用)?从母包生出渠道包实现方法?渠道标识替换原理?

Android打包哪些类型文件不能混淆?

Retrofit主要实现机制?

动态代理静态代理区别?

→上面这坨都是从我做过的项目或用过的开源库引申出的问题,而且挑的都是不太偏业务且技术性强一些的,这其实要求日常在把事儿做成的基础上还得再多看下原理顺带自己动手探索下,明晰人家每一步是怎么互相关联推动直至最终搞定的,而不是
加个dependency或copy下别人代码就完事儿嘞~

5、思维、架构:

模块化怎么做的?怎么设计的?接口发现暴露怎么做?基于什么思想?MVC、MVP、MVVM应用和彼此本质区别?

二面

==

→一面后面的题目因为这不是那种确定性答案的问题,只能多实战+战后总结并深入思考才能出真知啦,。

1.这面上来大概介绍了下自己,然后问了点我用过的东西比如Glide缓存特点?随后:你擅长Android中哪个方向呢?这问题我其实是按Android UI动画方面和移动端后台交互方案制定来预想过的,然鹅说完他挑了Android UI,第一个问题前他说,这个问题我问过很多人没几个能答出来的,你试试?

2.他:你看我这手机上这个launcher里应用抽屉(就是很多ROM都有的把很多APP管理归类的二级菜单功能)他在这ROM前一版是有个毛玻璃效果背景的,从系统ROM角度说下怎么做吧?

3.这100%是我一点没做过的,面试官八成也知道,也是很多人在面试里会遇到的情况,这时候别慌,我们可以从知道的东西里去推,哪怕只把把思路展示出来也OK;比如这个肯定是FrameWork做系统统一渲染那里要做些事,那系统渲染是谁管呢,SurfaceFlinger呀,它怎么工作的呢?它哪一步改动一下是不是可能就达到这效果了呢?这种思考过程是一个高工所要必备的,也是需要日常在面对很多问题时要培养自己去练就的思考方法~

4.**后面还有的UI相关的依旧是类似这种的两个大问题:**实时的水面倒影效果怎么做?这里面实时更新的UI性能如何保证?→我所处情形和思路同上

5.最后也是模块化、工程架构思想相关更细致的盘问,确实有些我之前没意识的问题被问及不过还是老方案:能想出来的就给方案,不能的就给思考过程。

三面

==

上来还是互相介绍,然后有个算法题解决个实际问题,

随后还是问问偏思想性的东西工程架构、之前提到的接口暴露又老生常谈,不过之前答的不太好我突然还是用知识迁移想了个好办法解决,对方也听后看似比较满意;

再然后还是擅长方向,

随即问题就是设计个IM客户端以及数据库架构吧,类似微信,偏上层业务部分的会话、联系人、通知、公众号如何存、分几张表,架构每一层都是啥,互相怎么交互工作?
再然后还是擅长方向,

随即问题就是设计个IM客户端以及数据库架构吧,类似微信,偏上层业务部分的会话、联系人、通知、公众号如何存、分几张表,架构每一层都是啥,互相怎么交互工作?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你编写一个漂亮的类似表格的日志打点方法,用于记录方法耗时。以下是一个示例的 Kotlin 代码: ```kotlin import java.util.concurrent.TimeUnit // 表格打印方法耗时 fun logMethodExecutionTime(tag: String, methodName: String, executionTime: Long) { val threadName = Thread.currentThread().name val formattedTime = String.format("%02d:%02d:%02d.%03d", TimeUnit.MILLISECONDS.toHours(executionTime), TimeUnit.MILLISECONDS.toMinutes(executionTime) % 60, TimeUnit.MILLISECONDS.toSeconds(executionTime) % 60, executionTime % 1000) val headerFormat = "| %-10s | %-20s | %-12s |" val rowFormat = "| %-10s | %-20s | %-12s |" val separator = "+------------+----------------------+--------------+" val header = String.format(headerFormat, "Thread", "Method", "Execution Time") val row = String.format(rowFormat, threadName, methodName, formattedTime) println(separator) println(header) println(separator) println(row) println(separator) } // 使用示例 fun main() { // 模拟方法耗时 val startTime = System.currentTimeMillis() Thread.sleep(2000) val endTime = System.currentTimeMillis() val executionTime = endTime - startTime // 打印方法耗时 logMethodExecutionTime("TAG", "methodName", executionTime) } ``` 这段代码会在控制台上打印出一个类似表格的日志,包含线程名、方法名和方法耗时。你可以将 `logMethodExecutionTime` 方法添加到你的 Android 项目中,在需要记录方法耗时的地方调用该方法即可。 请注意,以上代码只是一个示例,并且没有包含完整的异常处理和线程安全性。在实际使用中,你可能需要根据你的需求进行适当的调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值