校招 未知部门 / 客户端开发 / 未知轮次
[面试日期] 2023-08-14 [面试时长] 未知
[学校背景] 未知 | 未知 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>阿里淘天 24秋招客户端简历面</h2>
<p>牛客上投递的,集团还没开系统,被部门老哥提前约面。</p><p>约下午16点,老哥开会到17:30,然后电话面的<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"></p><p>面试内容如下:</p><ol><li>项目里面说到Kotlin,你认为Kotlin和Java的区别是什么?</li><li>Kotlin更简洁,加入了可空类型,扩展函数,Lambda表达式等</li><li>Kotlin减少空指针异常,引入了空类型;</li><li>Kotlin有扩展函数</li><li>有协程!</li><li>说到Kotlin协程,你使用协程过程中,它的优缺点?</li><li>优点:</li><li>轻量级,就是一个简单化的线程</li><li>方便操作,实现Callback功能,有async,await等操作符号</li><li>以声明的方式处理协调顺序,避免传统的回调地狱</li><li>缺点:除了和老版本的代码或者框架有兼容问题,自己没感觉有啥缺点<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553875209/BB341316D10390A7CC461F33E27B652F"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553875209/BB341316D10390A7CC461F33E27B652F"></li><li>协程实现callback功能的原理:</li><li>先说一下协程的好处:</li><li><span>Android通常会将耗时操作放到子线程中,然后通过回调的方式将结果返回后切换主线程更新UI,如果现在有多个子线程并发操作,UI线程在所有子线程工作完之后,处理他们的回调。</span></li><li><span>传统方法会在子线程设一个boolean值,1,0判断,但是这样去写会有回调地狱问题</span></li><li><span>可以用retrofit+Rxjava解决,Rxjava中还有Zip操作符</span></li><li><span>但是Kotlin协程就不用这么麻烦~</span></li><li><span>原理是kotlin可以实现挂起操作,等待结果过程中,运行lamada中的代码,等调用完成了,直接再恢复执行,然后调用。</span></li><li><span>Java常见集合类</span></li><li><span>ArrayList,Hashmap,hashset,linkedlist等</span></li><li><span>那线程安全的有哪些?</span></li><li><span>ConcurrentHashMap,CopyOnWriteArrayList(读的时候不加锁,写的时候加锁),包括跳表等</span></li><li><span>详细说一个实现原理:</span></li><li><span>跳表Skip List通过锁和CAS实现</span></li><li><span>说到CAS,详细说一下原理</span></li><li><span>保证原子性,先比较内存值与预期值,一样的时候才操作</span></li><li><span>锁和CAS区别</span></li><li><span>锁基于互斥,CAS基于比较</span></li><li><span>锁能阻塞,CAS非阻塞</span></li><li><span>锁是悲观锁的机制,CAS是乐观锁的机制</span></li><li><span>CAS比较发现失败了怎么办?</span></li><li><span>先重试,重试达到一个阈值之后获取锁来互斥访问</span></li><li><span>了解锁升级的过程吗?</span></li><li><span>偏向锁,一个线程访问,其他线程竞争,升级轻量级锁</span></li><li><span>多个线程竞争,没抢到锁的线程开始自旋,超过10次之后就要爆炸了!</span><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763745/E2D9680D1EDE6514D39DD543624818E2"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763745/E2D9680D1EDE6514D39DD543624818E2">锁升级为重量级锁</li><li>重量级锁的时候,线程就不会再循环干等了,会挂起等待</li><li>HashMap的get方法时间复杂度</li><li>平均是O(1),最坏的时候是O(n);</li><li>O(n)的时候是大量的键值对都映射到同一个桶里面,形成长链表或不平衡的红黑树</li><li>怎么减少这种情况?</li><li>哈希函数要设计好</li><li>当负载因子超过一定阈值的时候,进行扩容操作重新调整桶数量和分布</li><li>怎么设计一个好的哈希函数</li><li>根据键的特性做对应的哈希值;</li><li>取模运算,加一点位运算,异或等操作</li><li>散列变换</li><li>Https的证书校验流程</li><li>检验基本信息:证书所有者、有效期等信息进行一一校验</li><li>校验 CA 机构</li><li>解密证书:取出 颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密</li><li>比对 hash 值:浏览器使用相同的 hash 算法计算出服务器发来的证书的 hash 值,对比校验</li><li>使用OkHttp证书校验流程</li><li>获取服务器的数字证书,可以通过浏览器访问该服务器并查看证书信息,或者通过 OpenSSL 工具获取证书信息。</li><li>将数字证书添加到 Android 应用的资源文件中, raw 目录下的文件</li><li>创建证书工厂,将证书添加到该工厂中,以便 OkHttp 进行证书校验。</li><li>将证书工厂添加到 OkHttp 客户端中,并使用该客户端进行 HTTPS 请求。</li><li>使用TrustManager进行证书校验,使用 hostnameVerifier 进行主机名验证</li><li>说到自定义证书校验逻辑,使用的是哪种级别的校验?</li><li>不了解,只是简单看过同事代码<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553875209/BB341316D10390A7CC461F33E27B652F"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553875209/BB341316D10390A7CC461F33E27B652F"></li></ol><p> 反问:了解部门;了解秋招流程。</p><p>问完后要拜拜,结果手一抖我先挂的电话,不知道面试官在对面是不是已经偷偷骂我了<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43"></p><a>#Android面经#</a><a>#阿里#</a><a>#淘天#</a><a>#秋招面经#</a><a>#秋招#</a>
AI 推荐面试题
