您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > androidinterview
1.数据库的操作类型有哪些,如何导入外部数据库?导入数据库和建立数据库名字要一致//创建数据库地址filePath=context.getFilesDir()+/cal_holidays.db;pathStr=context.getFilesDir()+;FilejhPath=newFile(filePath);if(jhPath.exists()){returnSQLiteDatabase.openOrCreateDatabase(jhPath,null);}else{Filepath=newFile(pathStr);if(path.mkdir()){}else{//ToastUtil.showToast(context,创建本地数据库失败);}try{//执行数据库导入AssetManageram=context.getAssets();//欲导入的数据库InputStreamis=am.open(db/cal_holidays.db);//文件输出流FileOutputStreamfos=newFileOutputStream(jhPath);byte[]buffer=newbyte[1024];intcount=0;while((count=is.read(buffer))0){fos.write(buffer,0,count);}//关闭输出流fos.flush();fos.close();//关闭输入流is.close();}catch(IOExceptione){e.printStackTrace();returnnull;}returnopenDatabase(context);}文件创建成功。2.是否使用过本地广播,和全局广播有什么差别?只能在应用程序内部进行传递用localbroadcastmanager对广播进行管理注册时先localbroadcastmanager。Getinstance然后localbroadcastmanager。Registerreceiver发送时localbroadcastmanager。Sendbroadcast本地广播通过LocalBroadcastManager.getInstance(context).sendBroadcast(intent)发送广播,LocalBroadcastManager.getInstance(context).registerReceiver注册服务,通过LocalBroadcastManager.getInstance(context).unregisterReceiver取消注册服务,其他同普通广播.3.是否使用过intentServer,作用是什么,AIDL解决了什么问题?(小米)IntentService使用队列的方式将请求的Intent加入队列,然后开启一个线程来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的workerthread中处理,不会阻塞应用程序的主线程。只需重写onhandintent,工作线程会处理该方法实现的代码,完成请求后自动停止,解决了service不会专门启动一个单独的进程,不能直接处理耗时任务的问题4.Activity、Window、View三者的差别,fragment的特点?(360)一、如何将Activity展现在手机上Tips:Activity本身是没办法处理显示什么控件(view)的,是通过PhoneWindow进行显示的,换句话说:activity就是在造PhoneWindow,显示的那些view都交给了PhoneWindow处理显示.1、在Activity创建时调用attach方法:2、attach方法中会调用PolicyManager.makeNewWindow(),实际工作的是IPolicy接口的makeNewWindow方法①、其中创建了一个window(可以比喻为一个房子上造了一个窗户):mWindow=PolicyManager.makeNewWindow(this);②、在window这个类中,才调用了setContentView(),这是最终的调用在Activity的setContentView方法中,实际上是调用:getWindow().setContentView(view,params);这里的getWindow()就是获取到一个Window对象Tips:为啥attch优先于onCreate调用,就是由于在attch方法中,会创建window,有了window才能调用setContentView3、在IPolicy的实现类中创建了PhoneWindow:①、由mWindow=PolicyManager.makeNewWindow(this);,②、这里的makeNewWindow(this);方法中,返回的是:returnsPolicy.makeNewWindow(context);③、这个sPolicy实际是一个接口,其实现类是Policy,其中只是创建了一个PhoneWindow4、在PhoneWindow的setContentView中向ViewGroup(root)中添加了需要显示的内容①、PhoneWindow是继承Window的②、setContentView这个方法中,需要先判断一个mContentParent是否为空,因为在默认进来的时候,什么都没创建呢此时需要创建:installDecor(),DecorView是最根上的显示的可以通过adt中的的tools中有个hierarchyviewer.bat的工具,可以查看手机的结构③、DecorView:是继承与FrameLayout的,作为parent存在,最初显示的④、下次再加载的时候,mContentParent就不为空了,会将其中的所有的view移除掉,然后在通过布局填充器加载布局二、三者关系1、在Activity中调用attach,创建了一个Window2、创建的window是其子类PhoneWindow,在attach中创建PhoneWindow3、在Activity中调用setContentView(R.layout.xxx)4、其中实际上是调用的getWindow().setContentView()5、调用PhoneWindow中的setContentView方法6、创建ParentView:作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)7、将指定的R.layout.xxx进行填充通过布局填充器进行填充【其中的parent指的就是DecorView】8、调用到ViewGroup9、调用ViewGroup的removeAllView(),先将所有的view移除掉10、添加新的view:addView()Tips:①、Activity就是在造“窗户”,即创建PhoneWindow②、PhoneWindow才是进行显示view的操作,主要就是setContentView()Fragment特征:1、Fragment总是作为Activity界面的组成部分。Fragment可调用getActivity()方法获取它所在的Activity,Activity可调用FragmentManager的fingdFragmentByid()或findFragmentByTag()方法来获取Fragment。2、在Activity运行过程中,可调用FragmentManager的add()/remove()/replace()、方法动态的添加、删除或替换Fragment。3、一个Activity可以同时组合多个Fragment;反过来说一个Fragment可以同时被多个Activity复用4、Fragment可以相应自己的输入时间,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。Fragment引入的初衷为:适应大屏幕的平板电脑,简化大屏幕UI的设计,不需要开发者管理组件包含关系的复杂变化,开发者使用Fragment对UI组件进行分组、模块化管理,可以更方便地在运行过程中动态更细Activity的用户界面。5.描述一次网络请求的流程(新浪)在Android开发中,androidsdk附带了apache的httpclient,可以使用它的对象来执行get和post调用。一般使用步骤如下:1.使用DefaultHttpClient类实例化HttpClient对象;2.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象;3.调用execute方法发送Get或Post请求,并返回HttpResponse对象;4.通过HttpResponse接口的getEntity方法返回响应信息,并通过相应的处理。TCP三次握手所谓三次握手(Three-wayHandshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(SequenceNumber)字段里。第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(AcknowledgementNumber)设置为客户的ISN加1以.即X+1。第三次握手.客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1SYN攻击在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-openconnect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.Syn攻击就是攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击netstat-n-pTCP|grepSYN_RECV一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYNcookies技术、增加最大半连接和缩短超时时间等.但是不能完全防范syn攻击。TCP四次挥手TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-wayhandshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可
本文标题:androidinterview
链接地址:https://www.777doc.com/doc-2897173 .html