国内一线互联网公司内部面试题库
iOS基础
RunTime
1、RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。
2、对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。
3、OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
4、只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。
Scoket连接和HTTP连接的区别:
HTTP协议是基于TCP连接的,是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
HTTP连接:短连接,客户端向服务器发送一次请求,服务器响应后连接断开,节省资源。服务器不能主动给客户端响应(除非采用HTTP长连接技术),iPhone主要使用类NSURLConnection。
Socket连接:长连接,客户端跟服务器端直接使用Socket进行连接,没有规定连接后断开,因此客户端和服务器段保持连接通道,双方可以主动发送数据,一般多用于游戏.Socket默认连接超时时间是30秒,默认大小是8K(理解为一个数据包大小)。
NSThread、NSOperation、GCD
iOS有三种多线程编程的技术,这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。
NSThread :NSThread 轻量级最低,相对简单,但是需要手动管理所有的线程活动,如生命周期、线程同步、睡眠等
NSOperation : 自带线程周期管理,操作上可更注重自己逻辑,但是面向对象的抽象类,只能实现它或者使用它定义好的两个子类: NSInvocationOperation 和 NSBlockOperation。
GCD: 最高效,避开并发陷阱.
所以一般简单而安全的选择NSOperation实现多线程即可。而处理大量并发数据,又追求性能效率的选择GCD。
UIWindow和UIView和CALayer的联系和区别?
你一般是如何调试Bug的?
这个问题看起来很笼统,但又一针见血。通过应聘者的回答,可很直观地看出这个应聘者的处理bug的能力,以其解决问题的思维。
这是我的一个iOS技术交流群435675140,不管你是小白还是大牛欢迎加入一起交流共同进步 ,
android基础
1.数据库的操作类型有哪些,如何导入外部数据库?
把原数据库包括在项目源码的 res/raw
android系统下数据库应该存放在 /data/data/com..(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下.操作方法是用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录.
2.是否使用过本地广播,和全局广播有什么差别?
因广播数据在本应用范围内传播,不用担心隐私数据泄露的问题。
不用担心别的应用伪造广播,造成安全隐患。
相比在系统内发送全局广播,它更高效。
3.是否使用过intentServer,作用是什么,AIDL解决了什么问题?(小米)
生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至 onStartCommand() 方法的Intetnt。
生成一个工作队列来传送Intent对象给你的onHandleIntent()方法,同一时刻只传送一个Intent对象,这样一来,你就不必担心多线程的问题。在所有的请求(Intent)都被执行完以后会自动停止服务,所以,你不需要自己去调用stopSelf()方法来停止。
该服务提供了一个onBind()方法的默认实现,它返回null。
提供了一个onStartCommand()方法的默认实现,它将Intent先传送至工作队列,然后从工作队列中每次取出一个传送至onHandleIntent()方法,在该方法中对Intent对相应的处理。
AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。 AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
4.Activity、Window、View三者的差别,fragment的特点?(360)
Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutInflater像剪刀,Xml配置像窗花图纸。
1、在Activity中调用attach,创建了一个Window 创建的window是其子类PhoneWindow,
2、在attach中创建PhoneWindow 在Activity中调用setContentView(R.layout.xxx)
3、其中实际上是调用的getWindow().setContentView()
4、 调用PhoneWindow中的setContentView方法
5、创建ParentView:作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)
6、将指定的R.layout.xxx进行填充通过布局填充器进行填充【其中的parent指的就是DecorView】
7、调用到ViewGroup
8、调用ViewGroup的removeAllView(),先将所有的view移除掉
9 添加新的view:addView()
fragment 特点
1、Fragment可以作为Activity界面的一部分组成出现;
2、可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用;
3、 在Activity运行过程中,可以添加、移除或者替换Fragment;
4、Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主Activity的生命周期影响。
有一句话叫三人行必有我师,只是我的一个交流群435675140欢迎大佬们加入一起交流,如果需要2018 年全面的面试资料可以私聊或者直接加小编的qq3156033240