• android开发经验谈(java)


    1、连接GPRS网络优化

    由于GPRS基带网络每次连接都需要耗费时间,开发中应对网络进行区别处理(3G、4G、wifi不存在这个问题)——可以针对GPRS网络心跳保持连接,考虑用户流量和耗电的问题,让用户自助勾选“网络加速”选项。

    2、鉴权加密,防外挂

    (1)签名(三列函数)+加盐

    (2)尽量不要通过提交到后台获取sign,防外挂;对称加密保护秘钥,代码混淆打包;

    (3)防webshell攻击,过滤扩展名是无效的,数据写权限的隔离,专线ip局域网访问数据等网络手段

    3、防止重复提交

    界面disable、计数器,单例、synchronized;

    后台建立缓存表,队列操作;

    数据层监控

    4、UDP消息推送

    UDP穿透实现UDPserver分别绑定不同的udpclient的ip和端口,方便寻址,这样的推送节约资源,且开发效率比较高。

    5、手机令牌

    自助加密算法在svr和app分别计算出令牌key,要注意的问题是随机数的选择,时间变量要一致,最好采用标准时间,指定时间失效。

    6、机票整合

    机票代理商资源混乱,整合建模,实现自助的机票基础数据(机场、航线),供本地使用;

    7、Dcloud的MUI+Html5+实现APP方案

    使用HTML5+开发的移动App并非mobile web页面。这是新手最容易混淆的地方。mobile web的文件存放在web服务器上,而移动App的文件存放在手机本地,编写移动App的html、js、css文件被打包到ipa或apk等原生安装包,在手机客户端运行。

    阉割了web在B/s上面的优势,而仅仅用html5+js来作为app开发语言,亮点在于可以用hbuilder自助打包成apk和ipa,解决了原生html5实现web app的卡顿和白屏等问题,遗憾的是打包需要注册并提交到dcloud服务器才能打包。

    8、缓存共用数据

    应对网络请求进行监控和优化,对系统共用数据,应用启动或者登录时候分别加载一次就行,避免重复请求后台;

    大数据的下载用分页,在写入csv的时候最好分批写入,不要一行一行的写入,效率高很多;

    9、如何避免ANR

    避免在主线程上进行复杂耗时的操作,比如说发送接收网络数据/进行大量计算/操作数据库/读写文件等。这个可以通过使用AsyncTask或者使用多线程来实现;

    broadCastReceiver 要进行复杂操作的的时候,可以在onReceive()方法中启动一个Service来处理;

    10、android的生命周期

    四大组件:activity、service、broadcast、content provider

    activity的生命周期:

    (1)onCreate-->2、onStart-->3、onResume-->4、onPause-->5、onStop-->6、onDestory

    (2)onStop-->onRestart-->onStart

    (3)onPause-->onResume

    (4)启动事件:onstart、oncreate、onresume

    *OnsaveInstance和OnrestoreInstance的区别

    onsaveInstance用来保存活动被杀之前的状态;通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

    onRestoreInstanceState()在onStart() 和 onPostCreate(Bundle)之间调用。

    例:A通过onSaveInstanceState将有机会保存其用户界面状态,使得将来用户返回到activity A时能通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢复界面的状态。

    *Service和线程有什么区别?

    ——这是两个不同的概念,面试的时候当时我是一头雾水!

    service运行在主线程中的,也就是说如果在service里面有耗时代码,必然引发ANR;

    http://blog.csdn.net/jie1991liu/article/details/16105605 

    *通知Notification和广播Broadcast的区别?

    11、后台监控方案

    我们检测一个url是否正常直接监控http的response status就好了,配置一个STMP,发邮件到绑定微信的qq邮箱,能够做到实时的发现问题;

    二、面试题

    1、java线程相关、wait与sleep的区别?

    sleep()方法,属于Thread类中的;而wait()方法,则是属于Object类中的。

    Thread.sleep()与Object.wait()二者都可以暂停当前线程,释放CPU控制权,主要的区别在于Object.wait()在释放CPU同时,释放了对象锁的控制;

    相反,在调用sleep()方法的过程中,线程不会释放对象锁。

    注:synchronized 、volatile和java.util.concurrent.locks.lock的异同

    Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。

    ——加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用synchronized 修饰的方法 或者 代码块。

    ——用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新的值。volatile很容易被误用,用来进行原子性操作。

    ——lock包含synchronized不具备的功能,如锁投票、定时锁等候、可中断锁等候等;Lock一定要求程序员手工释放,并且必须在finally从句中释放;性能高于synchronized;

    2、Activity和services之间的传值,有哪几种方式?

    ——1、通过binder对象的bindservice方法;2、通过广播的形式:当我们的进度发生变化的时候我们发送一条广播,然后在Activity的注册广播接收器,接收到广播之后更新ProgressBar(比如Service要向多个Activity发送同样的消息的话,用这种方法就更好)

    onCreate()-->onStart()-->onBind()-->onUnbind()[重载后的方法需返回true]-->onRebind()

    http://blog.csdn.net/xiaanming/article/details/9750689

    3、FrameLayout和RelativeLayout的区别

    ——framelayout、Relativelayout、LinearLayout(Tablelayout)、absolutelayout

    4、.9图片处理

    上左定义拉伸区域;右下是内容部分;

    left和top边框中交叉部分是可拉伸部分,未选中部分是静态区域部分;

    right和bottom边框中交叉部分则是内容部分(变相的相当于定义看一个内边距,神似padding功能)

    5、Android2到android4的演变,jdk6和jdk7的异同,对开发的影响

    android4以后,不允许主线程访问网络,我觉得更加凸显了异步在app开发中的思想,有效的提升了应用本身的流畅性和用户体验。

    6、Dvm进程和linux进程的关系

    ——DVM指dalivk的虚拟机。Dalvik虚拟机运行的是其专有的文件格式Dex

    ——每一个DVM都是在Linux 中的一个进程

    7、View和SurfaceView和GlserfaceView的区别

    ——View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

    ——SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。

    ——GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图;是SurfaceView的子类,openGL专用。

    8、&和&& 的区别——&值按二进制位做与运算

    9、Android的IPC机制(进程间通信)

    ——AIDL方式、Messager方式

    Messager实现IPC通信,底层也是使用了AIDL方式。和AIDL方式不同的是,Messager方式是利用Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理,因此,我们使用AIDL方式时需要保证代码的线程安全

    http://www.cnblogs.com/freeliver54/archive/2012/06/13/2547739.html

    10、handler的机制原理,内部如何实现的,队列消息的实现机制

    背景:子线程通常是不能直接更新主线程(UI线程)中的UI元素的

    ——andriod提供了Handler 和 Looper 来满足线程间的通信。Looper类用来管理特定线程内对象之间的消息交换

    ——Message:消息对象,记录消息对象的类;

    ——MessageQueue:消息队列,用来存放Message的数据结构;按先进先出原则存放消息;

    ——Handler:消息的处理者。

    ——Looper:MessageQueue的管理者,线程中唯一。

    1)、首先Looper.prepare()声明在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个。

    2)、调用Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。

    3)、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联。

    4)、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue中。

    5)、在构造Handler实例时,我们会重写handleMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法。

    11、Map的并发问题?set、vector、list区别

    JAVA的容器---List,Map,Set 
    Collection 
    ├List 
    │├LinkedList 
    │├ArrayList 
    │└Vector ——类似ArrayList,但是同步的
    │ └Stack 
    └Set ——不包含重复元素的collection
    Map 
    ├Hashtable 
    ├HashMap 
    └WeakHashMap

    引自http://www.cnblogs.com/hnrainll/archive/2013/04/08/3006638.html

    12、泛型的作用

    ——将原来具体的类型参数化

    13、HashMap和HashTable的区别

    ——hashTable继承Dictionary;hashmap继承AbstractMap;

    ——hashtable的方法是同步的;

    ——hashtable的key和value都不允许使用null

    ——遍历的内部实现不一样

    ——哈希值使用不一样

    14、object的方法

    equals、getClass、hashCode、clone、toString、notify、finalize、wait

    http://www.blogjava.net/jiafang83/archive/2008/12/05/244510.html

    15、dpi,dip(dp),px,density的关联和区别

    【px】PX = density * DP

    【dpi】dots per inch,一英寸多少个像素点,像素密度,DPI本身的单位也是 像素/英寸,标准dpi = 160

    【dp】即dip,density independent pixels, dp = (DPI/(160像素/英寸))px = density px

      *注意,这里都是带单位的。px是单位,dp是单位,density没单位。

    【density】和标准dpi的比例,160px/inch,DPI/(160像素/英寸)

    【分辨率】 横纵2个方向的像素点的数量,常见取值 480X800 ,320X480

    【屏幕尺寸】 屏幕对角线的长度。电脑电视同理。

    转自:http://www.cnblogs.com/yaozhongxiao/archive/2014/07/14/3842908.html

    16、fragment的生命周期

  • 相关阅读:
    第二章 PROCESSES AND THREADS
    第一章 PROBLEMS
    第10章 图 10.1
    day2_jmeter关联的两种实现方式
    jmeter做SOAPui接口的性能测试
    day1_json_viewer美化接口请求、接口用例设计的方式和接口测试的必要性
    day1_jmeter接口如何添加断言
    day1_jmeter操作mysql步骤
    day1_jmeter添加cookie管理器和header信息头管理器
    day1_postman和jmeter处理接口入参既有key-value类型,也有上传文件类型的方式,利用postman实现自动化
  • 原文地址:https://www.cnblogs.com/qsl568/p/5048502.html
Copyright © 2020-2023  润新知