## 其他扩展面试题
### 一、Kotlin (⭐⭐)
#### 1、Kotlin 特性,和 Java 相比有什么不同的地方?
- 能直接与Java相互调用,能与Java工程共存
- 大大减少样板代码
- 可以将Kotlin代码编译为无需虚拟机就可运行的原生二进制文件
- 支持协程
- 支持高阶函数
- 语言层面解决空指针问题
- 对字符串格式化的处理($变量名)
- 更像Python的语法
- 对λ表达式支持更好
https://mp.weixin.qq.com/s/FqXLNz5p9M-5vcMUkxJyFQ
#### 2、Kotlin为什么能和Java混编?
#### 3、什么是协程?
### 二、大前端 (⭐⭐)
#### 1、Hybrid通信原理是什么,有做研究吗?
#### 2、JS的交互理解吗?平时工作用的多吗,项目中是怎么与Web交互的?
##### Android通过WebView调用JS代码:
1、通过WebView的loadUrl():
- 设置与Js交互的权限:
webSettings.setJavaScriptEnabled(true)
- 设置允许JS弹窗:
webSettings.setJavaScriptCanOpenWindowsAutomatically(true)
- 载入JS代码:
mWebView.loadUrl("file:///android_asset/javascript.html")
- webview只是载体,内容的渲染需要使用webviewChromClient类去实现,通过设置WebChromeClient对象处理JavaScript的对话框。
特别注意:
JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。
2、通过WebView的evaluateJavascript():
- 该方法比第一种方法效率更高、使用更简洁,因为该方法的执行不会使页面刷新,而第一种方法(loadUrl )的执行则会。
- Android 4.4 后才可使用。
只需要将第一种方法的loadUrl()换成evaluateJavascript()即可,通过onReceiveValue()回调接收返回值。
建议:两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2。
##### JS通过WebView调用 Android 代码:
1、通过 WebView的addJavascriptInterface()进行对象映射:
-定义一个与JS对象映射关系的Android类:AndroidtoJs:
- 定义JS需要调用的方法,被JS调用的方法必须加入@JavascriptInterface注解。
- 通过addJavascriptInterface()将Java对象映射到JS对象。
优点:使用简单,仅将Android对象和JS对象映射即可。
缺点:addJavascriptInterface 接口引起远程代码执行漏洞,漏洞产生原因是:
当JS拿到Android这个对象后,就可以调用这个Android对象中所有的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行。
2、通过 WebViewClient 的方法shouldOverrideUrlLoading ()回调拦截 url:
- Android通过 WebViewClient 的回调方法shouldOverrideUrlLoading ()拦截 url。
- 解析该 url 的协议。
- 如果检测到是预先约定好的协议,就调用相应方法。
根据协议的参数,判断是否是所需要的url。
一般根据scheme(协议格式) & authority(协议名)判断(前两个参数)。
优点:不存在方式1的漏洞;
缺点:JS获取Android方法的返回值复杂,如果JS想要得到Android方法的返回值,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回值传递回去。
3、通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息:
原理:
Android通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调分别拦截JS对话框
(警告框、确认框、输入框),得到他们的消息内容,然后解析即可。
常用的拦截是:拦截 JS的输入框(即prompt()方法),因为只有prompt()可以返回任意类型的值,操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值。

[Android:你要的WebView与 JS 交互方式 都在这里了]
#### 3、react native有多少了解?讲一下原理。
#### 4、weex了解吗?如何自己实现类似技术?
#### 5、flutter了解吗?内部是如何实现跨平台的?
#### 6、Dart语言有研究过吗?
#### 7、快应用了解吗?跟其她方式相比有什么优缺点?
#### 8、说说你用过的混合开发技术有哪些?各有什么优缺点?
### 三、脚本语言 (⭐⭐)
#### 1、脚本语言会吗?
#### 2、Python会吗?
[Python基础](https://jsonchao.github.io/2018/07/26/%20Python%E5%85%A5%E9%97%A8%E7%AF%87/)
[人工智能了解](https://jsonchao.github.io/2018/03/18/%E5%88%9D%E8%AF%86%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/)
#### 3、Gradle了解多少?groovy语法会吗?
## 非技术面试题
### 一、高频题集 (⭐⭐⭐)
#### 1、你觉得安卓开发最关键的技术在哪里?
技术是没有止境的,所以肯定会不断有演进和难点。
一. 底层和框架如何更好地设计及优化以适应业务的高速增长。说起来很简单,低耦合高扩展,做起来是需要长期经验积累。
二. 我抛几个细节难点:
- 插件化如何使插件的 Manifest 生效
- H5 容器如何更好地优化和兼容
- App 端优化,这是个没止境的话题,网络、图片、动画、内存、电量等等随着优化的加深,你会发现不能局限在客户端,服务端也需要深入。
- SPDY 的优点并入 HTTP 2.0 你们有在测试或用吗?
- Fresco 出来前你是不是觉得图片缓存已经到头了?
- Android App 为什么整体流畅性总是被诟病?……
三. 如果你觉得没有难点或者难点在兼容、UI 之类问题上,那么可能两个原因:
- 公司业务发展过慢,对技术的需求不够迫切
- 个人长时间在业务开发上,这个对于走技术路线的人来说挺麻烦的,不主动去接触学习的话,n 年以后也还是这个样子为了更好的个人成长,这两点都是需要注意和解决的问题。
#### 2、你还要什么了解和要问的吗?
你在公司的一天是如何度过的?
能否给我简单介绍下贵公司业务与战略的未来发展?
贵公司最让你自豪的企业文化是什么?(适合大公司)
团队、公司现在面临的最大挑战是什么?
对于未来加入这个团队,你对我的期望是什么?
您觉得我哪方面知识需要深入学习或者我的不足在那些方面,今后我该注意什么*?
你还可以问下项目团队多少人,主要以什么方向为主,一年内的目标怎样,团队气氛怎样,等内容着手。
#### 3、研究比较深入的领域有哪些?
#### 4、自己最擅长的技术点,最感兴趣的技术领域和技术?
#### 5、项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题?
#### 6、说下你都看过那些技术书籍,你是如何自学的。你觉得自己的优势与弱点是什么。
#### 7、说下项目中遇到的棘手问题,包括技术,交际和沟通。
#### 8、说下你近几年的规划?
#### 9、对加班怎么看(不要太浮夸,现实一点哦)?
#### 10、介绍你做过的哪些项目。
#### 11、你并非毕业于名牌院校?
#### 12、为什么要离职?
#### 13、当你的开发任务很紧张,你怎么去做代码优化的?
### 二、次高频题集 (⭐⭐)
#### 1、对业内信息的关注渠道有哪些?
#### 2、最近都读哪些书?
#### 3、给你一个项目,你怎么看待他的市场和技术的关系?
#### 4、你以往的项目中,以你现在的眼光去评价项目的利弊?
#### 5、对于非立项(KPI)项目,怎么推进?
#### 6、都使用过哪些自定义控件?
#### 7、除了简历上的工作经历,您还会去关注哪些领域?
#### 8、评价下自己,评价下自己的技术水平,个人代码量如何?
#### 9、你朋友对你的评价?
#### 10、自己的优点和缺点是什么?并举例说明?
#### 11、你觉得你个性上最大的优点是什么?
#### 12、说说你最大的缺点?
#### 13、最能概括你自己的三个词是什么?
#### 14、说说你的家庭?
#### 15、除了本公司外,还应聘了哪些公司?(类似问题:当前的offer状况)
#### 16、通过哪些渠道了解的招聘信息?
#### 17、你的业余爱好是什么?
#### 18、你做过的哪件事最令自己感到骄傲?
#### 19、谈谈你对跳槽的看法?
#### 20、怎样看待学历和能力?
#### 21、您跟您的主管或直接上司有没有针对以上离职原因的这些问题沟通过?如果没有请说明原因。如果有请说一下过程和结果?
#### 22、您觉得你关注的这些领域跟您目前从事的职业有哪些利弊关系?如果有请说明利弊关系?
#### 23、您在选择工作中更看重的是什么?(可能是成长空间、培训机会、发挥平台、薪酬等答案)
#### 24、您可不可以说说您在薪酬方面的心里预期?
#### 25、有人说挣未来比挣钱更为重要,您怎么理解?
#### 26、假设,某一天,在工作办公室走廊,您和一位同事正在抱怨上级陈某平时做事缺乏公平性,恰巧被陈某听到,您会怎么办?
#### 27、怎么样处理工作和生活的关系?怎么处理在工作中遇到困难?请举例说明
#### 28、在您的现实生活中,您最不喜欢和什么样的人共事?为什么?举例说明。
#### 29、在您认识的人中,有没有人不喜欢您?为什么不喜欢您?请举例说明。
#### 30、当老板/上司/同事/客户误会你,你会怎么办?
#### 31、当你发现其他部门的工作疏漏已经影响到您的工作绩效时,您怎么办?
#### 32、您希望在什么样的领导下工作?
#### 33、我们工作与生活历程并不是一帆风顺的,谈谈您的工作或生活中出现的挫折或低潮期,您如何克服?
#### 34、假如您的上司是一个非常严厉、领导手腕强硬,时常给您巨大压力的人,您觉得这种领导方式对您有何利、弊?
#### 35、您的领导给您布置了一项您以前从未触及过的任务,您打算如何去完成它?(如果有类似的经历说说完成的经历。)
#### 36、谈谈您以往职业生涯中最有压力的一、两件事,并说说是如何克服的。
#### 37、谈谈您以往职业生涯中令您有成就感的一、两件事,并说说它给您的启示。
#### 38、请您举一个例子,说明在完成一项重要任务时,您是怎样和他人进行有效合作的。
#### 39、当你要牺牲自己的某些方面与他人共事时,你会怎么办?
#### 40、有时团队成员不能有效共事,当遇到这种问题时你是怎么处理的?你又是如何改善这类情况的?
#### 41、我们有时不得不与自己不喜欢的人在一个团队工作,如果遇到这样的情况你会怎么办?
#### 42、您对委任的任务完成不了时如何处理?
#### 43、说说您对下属布置的任务在时间方面是如何要求的?
#### 44、说说您在完成上司布置的任务时,在时间方面是如何要求自己的?
#### 45、您以往在领导岗位中,一个月内分别有哪些主要的工作任务?
#### 46、当您发现您的部属目前士气较低沉,您一般从哪些方面去调动?
#### 47、说说您在以往领导岗位中出现管理失控的事例及事后的原因分析。您的部属在一个专业的问题上跟您发生争议,您如何对待这种事件?
#### 48、你对某某某互联网发生事情的看法?(直播答题等等)
#### 49、怎么看待前端和后端?