其他扩展面试题

一、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()对话框只能返回两种状态(确定 / 取消)两个值。

image

Android:你要的WebView与 JS 交互方式 都在这里了

3、react native有多少了解?讲一下原理。

4、weex了解吗?如何自己实现类似技术?

5、flutter了解吗?内部是如何实现跨平台的?如何实现多Native页面接入?如何实现对现有工程的flutter迁移?

6、Dart语言有研究过吗?

7、快应用了解吗?跟其她方式相比有什么优缺点?

8、说说你用过的混合开发技术有哪些?各有什么优缺点?

三、脚本语言 (⭐⭐)

1、脚本语言会吗?

2、Python会吗?

Python基础

人工智能了解

3、Gradle了解多少?groovy语法会吗?