android-java 面试题搜集-程序员宅基地

技术标签: 面试  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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30641465/article/details/99879890

智能推荐

Windows内核驱动中操作文件_win 内核模式读文件-程序员宅基地

文章浏览阅读5.7k次。一. 在驱动中使用文件在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象。例如:目录也是由文件对象代表的。内核组件通过对象名来引用文件,即在文件的全路径前面加\DosDevices。(在Windows 2000及后续操作系统中,\??等同于\DosDevices)。例如,文件C:\WINDOWS\example.txt的对象名为\DosDevic_win 内核模式读文件

【经验总结】SQL注入Bypass安全狗360主机卫士_sql_inject bypass-程序员宅基地

文章浏览阅读811次。0x00 前言这类的文章已经是比较多了,本文也主要是作为学习笔记来记录,主要是记录一下我在学习 SQL 注入 Bypass 的过程,同时前人的不少绕过方法已经失效了,所以这里也是记录一下最新规则的一些绕过方法。0x01 环境搭建测试环境:Win7 + Apache + MySQL 5.7.26 + PHP 5.5.45测试代码:<?phpif ($_GET['id']==null..._sql_inject bypass

matlab仿真fir滤波器,基于matlab的FIR滤波器的设计与仿真-程序员宅基地

文章浏览阅读768次。基于matlab的FIR滤波器的设计与仿真 毕 业 设 计 论 文 基于matlab的FIR滤波器的设计与仿真 指导老师姓名: 专 业 名 称:电子信息工程技术 班 级 学 号: 09136210 论文提交日期:2011年12月15日 论文答辩日期:2011年12月16日 2011年 12月 15 日 摘 要 FIR滤波器是数字滤波器系统中常见的滤波器。论文针对窗函数法、最优化设计法和最小约束二乘..._一种基于短波校时信号的fir滤波器matlab仿真设计

Python-Django初体验—创建Django项目并实现页面跳转功能_django跳转到指定页面-程序员宅基地

文章浏览阅读8.7k次,点赞14次,收藏85次。关于Python-Django创建新项目,并实现页面跳转功能。_django跳转到指定页面

1024程序员节,送18本技术书籍给大家,祝大家节日快乐_1024送书-程序员宅基地

文章浏览阅读1.9w次,点赞167次,收藏214次。新的资源等你来去,永久免费哦~【作者注】: 1024已经过去了,本文的送18本书的活动也已经结束了(原文内容已经删除)。考虑到该文章可能还会被一些朋友看到,所以我在这留了一波福利,永久有效,希望能对大家有用,也希望大家能够感受到我一片心意。免费给大家赠送一波很有价值的架构师视频教程,总共四个阶段,非常棒的资源。领取方式如下:扫描上方二维码关注我的公众号『程序员私房菜』,在公众号内回..._1024送书

Spring .NET框架概览-程序员宅基地

文章浏览阅读68次。Spring.NET 是一个关注于.NET企业应用开发的应用程序框架。它能够提供宽广范围的功能,例如依赖注入、面向方面编程(AOP)、数据访问抽象, 以及ASP.NET集成等。基于java的spring框架的核心概念和价值已被应用到.NET。Spring.NET 1.0 包含一个完全功能的依赖注入容器和AOP库。后续的发布将包含对ASP.NET、Remoting和数据访问的支持。下图展现出了 Sp..._.net spring.core spring.data spring.service 框架

随便推点

soul源码分析数据同步篇之HTTP长轮询同步流程_长轮询数据流程图-程序员宅基地

文章浏览阅读280次。说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。如何开启HTTP同步策略这个小节主要引自soul官网 使用不同的数据同步策略soul-admin的配置application.yml中添加如下配置,或是在启动参数中添加--soul.sync.http='',然后重启服务:soul: sync: http: enabled: truesoul-bootstrap的_长轮询数据流程图

入职IT岗位,如何做一份出彩的简历_简历如何出彩 it行业-程序员宅基地

文章浏览阅读502次。工作信息千万条,应聘上才是第一条。简历不出彩,何以博眼球?面试过的同学可能都知道,行业千千万万,但只有那些专业性特别强,像IT行业、金融行业之类的工作需要你的简历必须出彩,不能光只有基本信息。一份基本的简历,是我们和人事交流的开始;一份真正好的简历,才是通向一份好工作的敲门砖。那么如何在众多求职者投递的简历当中脱颖而出,一眼被HR相中,这是一门学问,值得我们去认真对待。当我还在学校的时候,从不曾想到过这个问题。制作的简历自然也是平平无奇,因为确实不知道面试官需要求职者应该具备如何的闪光点。._简历如何出彩 it行业

易优cms 多语言版本的分页变量修改_eyoucms后台页面修改-程序员宅基地

文章浏览阅读961次。在使用多语言版本时,遇到了分页没有多语言时怎么处理?这个需要改动分页PHP文件,文件目录 根目录corelibrary hinkpaginatordriver。Eyou.php是PC端,Mobile.php是手机端然后打开Eyou.php修改PC端分页打开后找到下面代码,替换红色部分1,大改在97行 /** * 共N页 N条 * @param string $t..._eyoucms后台页面修改

Android O(8.0) Keyguard之启动流程_android keyguardbouncer-程序员宅基地

文章浏览阅读1.8k次。今天开始梳理SystemUI Keyguard源码话不多说首先从启动流程开始:起点是在 SystemUI/src/com/android/systemui/SystemUIService.javaonCreate() -> ((SystemUIApplication) getApplication()).startServicesIfNeeded();启动SystemUI各..._android keyguardbouncer

数据扁平化-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏23次。什么是扁平化数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下:var arr = [1, [2, [3, 4]]];console.log(flatten(arr)) // [1, 2, 3, 4]一、递归我们最一开始能想到的莫过于循环数组元素,如果还是一个数..._数据扁平化

PPPOE和pppd的流程详解--good_pppd pppoe-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏18次。PPD是用户态应用程序,负责PPP协议的具体配置,如MTU、拨号模式、认证方式、认证所需用户名/密码等一 终端 终端介绍 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。看下面一副图展示了计算机系统与终端之间得联系。 终端驱动程序的主要功能是在程序与相关设备之间进行数据传递。在一个LINUX内核自身的内部_pppd pppoe

推荐文章

热门文章

相关标签