android-java 面试题搜集

1、注册广播有哪几种方式,有什么区别
1-1.常驻型广播 注册方式就是在应用程序的AndroidManifast.xml中进行注册,这注册方式通常又被称作静态注册
action android:name="android.provider.Telephony.SMS_RECEIVED"/>
1-2、非常驻形广播
··非常驻型广播,当应用程序结束了,广播自然就没有了,   比如在 Activity 中的onCreate或者onResume中注广播接收者,在onDestory 中注销广播接收者。这样广播收者就一个非常驻型的了,这种注册方式也叫动态注册

2、绘制 Activity 的生命流程图
3、注册Service需要注意什么
Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thrad并且start()不行的,因为这违背了Android的单线程模型。这里我推荐使用Hanlder和AsyncTask,尤其是AsyncTask,

4、Service与Activity怎么实现通信
    第一:通过Intent,这个比较简单了,可以指定package name和class name的方式调用,Intent。setClassName这个成员
即可。通过putString进行数据装载,startService(intent)即可
    第二:通过IPC,这个比较麻烦,一般用不着,这里不谈
----------怎么反过来呢
    第一:Service通过广播的形式发送boardcast,我们写一个boardcastReceiver即可。
    第二、service直接向activity发intent,在service里面进行startActivity,是属于在Activity外
startActivity即在task外启动activity,因此,必须在intent加入一个参数如下:
Intent intentSend=new Intent(Constants.ACTION_STATUS);
intentSend.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentSend.putExtra("status","end");
startActivity(intentSend);


5、Handle通信具体到源码,是怎么实现的
    Message这个类里有个 Handler target成员,表示这个消息由哪个Handler处理。Handler的sendMessage方法就是将这个成员变量设置为当前的Handler。不同类(非Activity)只要把Handler变量传进去就行。

6、Handle的机制
    1. Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。

2. Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。

3. Message Queue( 消息队列): 用来存放线程放入的消息。

4. 线程:UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个Message Queue 。

每一个线程里可含有一个Looper 对象以及一个MessageQueue 数据结构。在你的应用程序里,可以定义Handler 的子类别来接收Looper 所送出的消息。

7、怎么实现ListView多种布局?
    在自定义adapter中需要重写两个方法:getItemViewType() 、 getViewTypeCount(), getViewTypeCount这个方法返回是布局的数量,当返回的布局大于1时,adapter 会分配多个convertview,而根据getItemViewType 返回的type进行标记, getItemViewType返回的type是从0-n 开始的,也就是和数组的下标相同,如果返回的type >=getViewTypeCount 就会报错。以下代码是业务逻辑的一部分。仅供参考

8、ListView与数据库绑定的实现
    1.将Sqlite数据库的内容查询出来并放入数组列表中,形成ListView的数据源;
    2.适配器绑定数据源,显示在ListView item中。

9、怎么实现一个部分更新的 ListView?
    Adapter的notifyDateSetChanged()方法即可。


10、JAVA多态的实现原理

抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法。

11、JAVA 垃圾回收机制
    什么是垃圾回收机:释放那些不再持有引用的对象的内存
    
12、JAVA 中堆和栈的区别,说下java 的内存机制
    基本数据类型比变量和对象的引用都是在栈分配的
    堆内存用来存放由new创建的对象和数组
    类变量(static修饰的变量),程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
    实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希        算法换算为一长串数字以表征这个变量在堆中的"物理位置”,实例变量的生命周期--当实例变量的引用丢失后,将被GC(垃圾回收器)        列入可回收“名单”中,但并不是马上就释放堆中内存
    局部变量: 由声明在某方法,或某代码段里(比如for循环),执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域,内存立        即释放

13、讲讲 Java 中的集合有多少种,区别是什么?
    ArrayList、LinkedList、Vector的区别:ArrayList 和Vector底层是采用数组方式存储数据,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,随机存取比较慢
    HashMap和 HashTable 的区别:
        HashTable比较老,是基于Dictionary 类实现的,HashTable 则是基于 Map接口实现的
        HashTable 是线程安全的, HashMap 则是线程不安全的
        HashMap可以让你将空值作为一个表的条目的key或value
14、ListView卡顿的原因与性能优化,说的越多越好
     ListView卡顿原因分析
   1..Adapter的getView方法里面convertView没有使用setTag和getTag方式;
   2.在getView方法里面ViewHolder初始化后的赋值或者是多个控件的显示状态和背景的显示没有优化好,抑或是里面含有复杂的计算和耗时操    作;
   3.在getView方法里面 inflate的row 嵌套太深(布局过于复杂)或者是布局里面有大图片或者背景所致;
   4.Adapter多余或者不合理的notifySetDataChanged;
   5.listview 被多层嵌套,多次的onMessure导致卡顿,如果多层嵌套无法避免,建议把listview的高和宽设置为fill_parent. 如果是代码     继承的listview,那么也请你别忘记为你的继承类添加上LayoutPrams,注意高和宽都是fill_parent的;
15、Android中的动画有哪些,区别是什么
    一个是补间动画、一个是逐帧动画
····区别:补间动画这种实现方式可以使组件移动 放大 缩小 以及旋转的变化
········逐帧动画 类似电影通过播放排序好的图片    
········补间动画、通过核心API AlphaAnimation---TranslateAnimation--ScaleAnimation--RotateAnimation 设置属性
    animation.setDuration(3000)来设置频率

桌帧动画核心api是 AnimationDrawable 和anim下的dance.xml下的Animation_list配合使用

    animation_drawable=(AnimationDrawable) stage.getBackground();


16、说说内存泄露的情况有哪些
    1. 查询数据库而没有关闭Cursor
    2. 调用registerReceiver后未调用unregisterReceiver().
    3. 未关闭InputStream/OutputStream
    4. Bitmap使用后未调用recycle()
        5. Context泄露
17、OOM是怎么引起的?怎么尽量避免 OOM 问题的出现

    因为刷机失败而导致系统取读系统文件失败,所以所引发的安全机制。

    1)使用更加轻量的数据结构
    避免在Android里面使用Enum
        减小Bitmap对象的内存占用
    使用更小的图片
       复用系统自带的资源
    避免在onDraw方法里面执行对象的创建
    StringBuilder
    

18、什么是 ANR 问题?为什么会引起 ANR 问题?
      在Android里,应用程序的响应性在Android里,应用程序的响应性是由Activity Manager和WindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:1.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)
2.BroadcastReceiver在10秒内没有执行完毕

19、如何避免ANR?
    1、运行在主线程里的任何方法都尽可能少做事情
    2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算
    3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点

20、Socker编程的步骤
     创建服务器的步骤:
1,指定端口实例化一个ServerSocket
2,调用ServerSocket的accept方法以在等待连接期间造成阻塞
3,获取位于该底层Socket的流以进行读写操作
4,将数据封装成流
5,对Socket进行读写
6,关闭打开的流
  创建客户端的步骤:
1,通过IP地址和端口实例化Socket,请求连接服务器
2,获取Socket上的流以进行读写
3,把流包装进BufferedReader/PrintWriter的实例
4,对Socket进行读写
5,关闭打开的流

21/设计一个图片缓存加载机制

22/Fragment嵌套多个Fragment会出现bug吗
23/Scrollview怎么判断是否滑倒底部
    1、实现OnTouchListener来监听是否滑动到最底部
    2、重写ScrollView的onScrollChanged的方法,在onScrollChanged函数中判断

24、怎么把字符串转成字节数组、String.spits
    怎么把字节数组放到集合里面  arrays.toArray();
    Arrays.asList();
25、任意五个路径
26、hashMap hashtable 区别
27、arraylist 和hashMap的区别  前者是线性集合结构、后者是键值对
28、线程和进程的区别
    答:线程是程序执行的最小单元、线程依赖进程、并且由代码控制 、进程则由操作系统控制、还有进程具有独立的内存空间、线程共享进程资源




1、播放音频:1、mediaPlayer
1.1、在Res文件目录下创建raw文件夹、里面放置音频文件、
2、SoundPool/assets
2----------------------------------
视频播放器 VideoView 核心API MediaController控制器
这个时候需要配置权限、写入和创建
关键代码:
VideoView view=(VideoView)findViewById(R.id.video);
MediaController controller=new MediaController(MainActivity.this);配合使用
3、录音:mediaRecoder
4、拍照
5、多线程:
6、多个线程并发进行、断点续传,充分挖掘CPU资源,提高程序的执行效率
7、线程和进程 互相依赖
8、什么是进程?进程是有操作系统控制,线程是应用程序执行的最小单位,不可分割,由代码控制
一个进程包含多个线程,进程具有独立的内存空间,线程共享进程内的资源。
9、tcp udp
前者安全协议,需要三次握手
后者不需要握手、非安全协议
10、socket通信 :点对点通信、很多即时通信都是通过这个完成的,网络通信机制、每台设备有自己的端口号,
11、网络交互:URL/Httpclient/XUtils
12、第三方框架、一句话:xutils网络访问、AChartEngine报表、image_loader 图片加载。
13、上线了吗?上线了、百度助手、360、可能下架了
14、负责模块、编码主要自己做、前段的设计什么的  都是由经理带着做的
15、项目介绍:我是会计:
    我的钱包、安全设置、数据备份、主题设置、其他设置、关于软件以及月/周/学期统计
16、处理事件的方式;回调、setOnclickListener/监听
17、监听有五种:外部内、内部类、匿名内部类、activity本身、click绑定时间
18、四大组件:activity/service/contentprovider/boastCast receiver;
19、底层实现
20、异步处理的方法
21、HttpConectionURL
22、计时器Timer



财务部 市场部 研发部 行政部门  5个人 老大带领anandroid和java  行政部 20来个


android的核心文件 androidManifest.xml 根节点Manifest--第二层application--第三层activity-intent

30、activity的生命周期
  从开始到销毁的过程--oncreate=ondestory的过程

29、
28、sax pull两者相似 基于事物处理
29/list map
330/hashmp hashtable
34、浏览器兼容
35、前段框架 jquery html5
36、四大组件
38、六大布局
39、layout_gravity
40、数组和集合  长度/
    String是个final类、不能派生出子类
          Object是一切类的父类

转载于:https://www.cnblogs.com/xiaojian-aspx/p/5993160.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值