概述
博主前天又参加了面试,面试情况明显比第一次要的好多啊,但是感觉还是差一点点啊,总体面试的感觉就是,有些自己不用但是看过的东西都不了解,只知道有这个东西,但不知道这东西具体的用法,感觉大家学习的时候得注意一下,下面给大家看一看面试上遇到的一些问题(重复的问题不在列出啦,感觉2.0不全的话还可以去1.0补一补的)
java
- 静态变量与非静态变量的区别:
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,每次创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
//JVM是Java Virtual Machine的缩写,是java虚拟机的意思。
具体原理感兴趣的可以自行百度,这里说一下java虚拟机的优势把(多平台性):java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
2.静态内部类与非静态内部类
内部类:定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性。内部类也可以访问外部类的所有成员与方法(静态与非静态的都可以)。
静态内部类:说白了就是用static修饰的内部类,静态类中可以有静态方法也可以为非静态方法,静态方法可以直接调用,但非静态的方法是不能直接调用的,必须创建对象才行。而且静态内部类是依赖这外部的类而存在的,如果要是实例化的话与内部类的实例化还是有区别的,如果要调用外部类的变量的化,只能调用静态变量,如果要调用非静态变量需要创建对象。而且只有静态内部类中才能有静态方法与变量(内部类不行),如果要定义静态的方法和变量,必须将其声明为静态内部类(这里说的是内部类与静态内部类,与外部类无关)。
静态内部类与内部类的实例化区别:
//A类中有内部类B与静态内部类C
内部类B实例化:A.B b=new a().new b();
静态内部C类实力化:A.C c=new A.C();
3.hashmap(这个听说很重要啊!!!!):
先给上原理:是java中的一种Map集合,HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来储存Node 对象。这里关键点在于指出,HashMap是在bucket中储存键对象和值对象,作为Map.Node。
再给上他的特点:1.是继承Map接口的
2.是非同步的,所以比较高效
3.他的键和值可以为null
4.HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻 址修改。
最后给上简单的使用方法:
Map<String,String> map=new HashMap<String,String>();
//put用于添加与修改map的值.在map中分为键与数据,前面保存的为键,后面的为数据,查询的时候通过键来寻找数据。 map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//对map进行遍历(用高级for循环遍历)
for(String key:map.keySet())//keySet()可以获得map中所有Key值的列表,Key值就是键值。
{
System.out.println("Key: "+key+" Value: "+map.get(key));//get(key)是获取key值所对应的数据
}
//如果直接输出map也是可以的System.out.println(map);会输出{1=value1,2=value2,3=value3}
HashMap的其他方法:
containsKey(Object key)方法,返回值为boolean,用于判断当前hashmap中是否包含key对应的key-value
containsValue(Object value)方法,返回值为boolean,用于判断当前hashmap中是否包含value对应的key-value
//这不是并不是最快的遍历方法,但是应该最好理解了。而且hashMap这里说的只是一些皮毛并不是全部,用法也是最基本的,要想深如理解还是得理解源码才能完全理解,而且hashMap还有很多机制这里没有说到。
4.常用的异常类型
问这问题时候可真是难住我了,因为就算碰到异常也只是直接catch一个Exception e了,当时写代码时候真的很爽,但 过后发现其实真的很不负责任啊。
常用的10大异常:
1 Java.lang.NullPointerException(空指针异常)
这个异常大家肯定都经常遇到,异常的解释是 “程序遇上了空指针 “,简单地说就是调用了未经初始化的对象或者是不存 在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等 等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的 初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,
依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)
2 java.lang.ClassNotFoundException(没有指定的类)
这个出现的情况就是没有导入对应的包。
3 java.lang.ArithmeticException
这个异常的解释是 “数学运算异常 “,比如程序中出现(1/0)除以零这样的运算就会出这样的异常,对这种异常,大家就要 好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。
4 java.lang.ArrayIndexOutOfBoundsException(数组越界异常)
就是数组的长度太短了,下标越界了,就要好好检查数组的长度了。
5 java.lang.IllegalArgumentException(方法参数异常)
就是说方法中参数不符合规则,比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的会 出现 这个异常,再比如如果参数要求正数,你传递了一个负数也会跳这个异常。
6 java.lang.IllegalAccessException(没有访问权限异常)
当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这 个异常。对程序中用了 Package的情况下要注意这个异常。
7 java.lang.IncompatibleClassChangeError(不兼容的类变化异常)
当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义 而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。
8 java.lang.InstantiationError( 实例化异常)
当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常。
9 java.lang.LinkageError(连接异常)
该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译 所有的类,进而引发错误的情况。
10 java.lang.StackOverflowError(堆栈溢出异常)
当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。
自己感觉常用的2个异常:
IOException(IO异常又叫读写异常):就是在程序读写数据时出现的错误。
RunntimeException(运行时异常):程序运行时所产生的异常。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据结构
这次的数据结构问的比较基础,跟1.0是差不多的。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------android
1.Handler的用法:
Handler是android中所用的消息处理机制,用于线程之间的通讯,主要是用于子线程与主线程之间的通讯,当然也有其他的用法,这里就介绍最基本的子线程与主线程的通讯。由于在android中的耗时操作(像是网络请求这样的)需要在子线程中进行,但是一般进行完耗时操作,都要对UI控件进行操作(说白了就是在屏幕上显示耗时操作的结果)。但是由于在子线程中进行UI控件的操作会出现错误,使程序崩溃。所以UI操作只能在主线程中进行,所以就引入了Handler的用法。
说到了Handler是负责发送与接送的,那么他发送与接收的是什么呢?这里就引出了另一个类Message,Message可以携带一些少量的信息,或者通过Bundle这个中间量来传递一个对象。(为方便理解这里给上最简单最好理解的代码)
首先创建一个Handler对象:Handler handler=new Handler(){//一定要定义在为全局变量,定义在最上边。
public void handleMessage(Message msg){
switch(msg.what){
case 1://当msg.what为1时进行的UI操作
break;退出循环
default:break;}
}
//Handler中的sendMessage方法传递的message会到Handler的方法handleMessage中。
}
然后需要创建一个子线程:new Thread(new Runnable(){
@Override
public void run(){
//耗时操作
}
}).start();//比较简单的子线程创建方法,新手推荐先了解原理。
创建一个Message进行绑定数据: Message Message=new Message();
用Message的已有字节来绑定数据: message.what=1;
调用handler中的sendMessage方法把数据传出去: handler.sendMessage(message);
子线程的操作就结束了,上面写的主线程会继续执行接下来的UI操作。
// 这里仅仅说了最简单的用法来方便理解,当然更复杂的方法与用法还是有的,就不都列举出来了。这种处理方法叫异步消息处理机制,当然也不只这一种,还有一种可以使用AsyncTask处理也是可行的,想了解的小伙伴可以了解一下,也是很好用的。
2.android的常用布局:
android的4种基本布局:
1.线性布局:
线性布局为最常用的布局,跟他名字一样就是像一条线一样,横着或竖着排列起来的。
2.相对布局:
也是比较常用的,它可以通过相对定位的方式让控件出现在布局的任何位置。比如让一个控件位于整体的 左上,左下,右上,右下这样,或者位于另一个控件的左上,左下,右上,右下这样。
3.帧布局:
这个就不是很常用了,所有控件会堆在左上角,没错,还会重合。
4.百分比布局
这是以前没有的新增布局,为了解决控件平分布局的难题,在这种布局中,不再使用wrap_content和 match_parent来指定控件大小,而是直接指定控件在布局中所占百分比,这样就可以轻松实现平分布局甚至任 意比例分割布局
3.recylerView的下滑刷新
说实话,博主也没用过这个功能,基本都是靠切换界面来实现刷新的,但既然问到了就说明还是挺常用的,虽然网上也有实现教程,但自己没用过的东西也不敢说对错,错了就很尴尬了。现在还在面试期,等面试期结束后会研究一下这个下拉刷新的功能,再与大家分享一下啊。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其实博主这几天面试了不止两家公司,也面了很多公司,有的没什么营养,有的问项目比较多,因为都是自己写的,答的也比较得心应手,也不与大家分享了。还有的应该是招满人了,就与hr谈了20分钟就让走了,反正面试这东西什么样的都有,一个公司一个样,要是第一次面试的小伙伴,建议多看几家在决定,不要给offer就去了,给offer固然是好,但是感觉还是找一个最合适自己的公司最重要啊。这就是博主的经验了(估计还会有3.0),要是接下来的公司还有比较精髓(偏理论的)的面试题的话还会与大家分享的。也祝大家成功啊!!!!
//老规矩,要是博客有错误欢迎随时留言,会马上更改的。
最后
以上就是飞快哑铃为你收集整理的初级android面试2.0的全部内容,希望文章能够帮你解决初级android面试2.0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复