其他扩展面试题
一、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 交互方式 都在这里了