首页 > 其他分享 >【金九银十面试冲刺】Android岗面试题每日分享

【金九银十面试冲刺】Android岗面试题每日分享

时间:2023-08-03 21:03:07浏览次数:37  
标签:面试题 HashMap public static Hashtable Android final 变量 金九银

已经进入八月份了,我看到了许多朋友在焦急的准备“金九银十”跳槽面试,甚至很多即将毕业的大学生都在备战秋招,对于学历还算优秀的大学生来说,这是一次离大厂最近的机会,毕竟是应届毕业生,不会对技术有非常严格的要求。

而对于工作了一两年的Android开发朋友来说,这段时间加强技术能力,多掌握一些Android核心技术点是重中之重。

为了大家更好的冲刺金九银十,在此每天分享2~3道面试题,希望能对大家的面试起到一点帮助! 话不多说,一起来看面试题吧!!

有需要更多面试题的小伙伴,可以点击下方课程链接详细了解!!!

https://edu.51cto.com/course/32703.html

分别讲讲 final,static,synchronized关键字可以修饰什么,以及修饰后的作用?

static

1.static 方法 static 方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this 的,因为它不依附于任何对象,既然都没有对象,就谈不上 this了。

public class StaticTest{
    public static void a(){
    }
    public static void main(String[]args){ 
        StaticTest.a();
    }
}

2.static 变量 static 变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。 3.static 代码块 static 关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static 块可以置于类中的任何地方,类中可以有多个 static 块。在类初次被加载的时候, 会按照static块的顺序来执行每个 static块,并且只会执行一次。

public class StaticTest{ 
    private static int a ;
    private static int b;
    static {
        a = 1;
        b = 2;
    }
}

final

1. final 变量 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为 final的都叫作 final变量。final 变量经常和 static 关键字一起使用,作为常量。

private final int aa = 1;
static {
a = 1;
b = 2;
}
private void init(){
    aa = 2;//报错编译器会提示 不能赋值。。
}
public static void main(String[]args){ 
    StaticTest.a();
}
class StaticTest2 extends StaticTest{ 
    public final void a(){ 
        //这边就会编译器提示不能重写
    }
}

2. final 方法 final也可以声明方法。方法前面加上 final 关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为 final。final 方法比非 final 方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。 3. final 类 其实更上面同个道理,使用 final 来修饰的类叫作 final类。final 类通常功能是完整的,它们不能被继承。Java 中有许多类是 final 的,譬如 String,Interger 以及其他包装类。

synchronized

synchronized 是 Java 中解决并发问题的一种最常用的方法,也是最简单的一种方法。synchronized 的作用主要有三个:

  • 确保线程互斥的访问同步代码
  • 保证共享变量的修改能够及时可见
  • 有效解决重排序问题。

1.synchronized 方法有效避免了类成员变量的访问冲突:

private synchronized void init(){
    aa = 2;
}

2.synchronized 代码块 这时锁就是对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的 instance 变量(它得是一个对象)来充当锁。


public final void a(){ 
    synchronized(lock){
//代码
    }
}
@Override
public void run() {}

请说一下HashMap与HashTable的区别

HashMap和Hashtable的比较是Java面试中的常见问题, 用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java集合框架中的一部分。Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合框架面试题中最常被考的问题,所以在参加任何Java面试之前,都不要忘了准备这一题。

1父类不同

第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

public class HashMap<K, V> extendsAbstractMap<K, V>
implements Cloneable, Serializable {...}
public class Hashtable<K, V> extends Dictionary<K, V>
implementsMap<K,V>,Cloneable, Serializable {...}

而HashMap继承的抽象类AbstractMap实现了Map接口:

public abstract class AbstractMap<K, V> 
implements Map<K, V> {...}

2 线程安全不一样

Hashtable 中的方法是同步的,而HashMap中的方法在默认情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

3允不允许null值

Hashtable中,key和value都不允许出现null值,否则 会抛出NullPointerException异常。而在HashMap中,null可以作为键,这样的键只有一 个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap 中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

4遍历方式的内部实现上不同

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

5哈希值的使用不同

HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

6 内部实现方式的数组的初始大小和扩容的方式不一样

HashTable中的hash数组初始大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16, 而且一定是2的指数。

最后

我整理了一套Android面试题合集,也包括以上面试题,有需要的朋友可以点击下方课程链接详细了解!!!

https://edu.51cto.com/course/32703.html

【金九银十面试冲刺】Android岗面试题每日分享_静态变量

标签:面试题,HashMap,public,static,Hashtable,Android,final,变量,金九银
From: https://blog.51cto.com/u_16163442/6953205

相关文章

  • Java面试题 P48:框架篇:MyBatis执行流程
         ......
  • Java面试题 P48:框架篇:Spring框架常见注解(Spring、SpringBoot、SpringMvc)
        ......
  • 8.3面试题目和经验总结
    目录一、Python中如何把字符串倒过来1.使用切片2.使用reverse()3.使用join()4、使用for循环5.小结一、Python中如何把字符串倒过来在Python中,想要把字符串倒过来其实并不复杂,可以通过切片、reverse()、join()等方法来实现。1.使用切片在Python中,可以通过反向切片的方式来实现......
  • Android平台如何实时叠加电量信息和设备信号状态到GB28181接入端
    技术背景我们在Android平台实现GB28181设备接入,把摄像头和麦克风数据,采集过去,用于移动单兵、智能车载、智慧安防、智能家居、工业仿真等行业时,发现大多场景对视频水印的要求越来越高,从之前的固定位置静态文字水印、png水印等慢慢过渡到动态水印需求。本文,我们要探讨的是,除了常规的......
  • Java面试题 P46:框架篇:SpringMvc的执行流程?
         ......
  • python面试题
    基础篇1.为什么学习PythonPython语言简单易懂,上手容易,随着AI风潮,越来越火2.解释型和编译型语言的区别编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后,可直接运行这个程序。如:C,C++解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!如:Python,(Java有些......
  • Rust交叉编译为Android库
    Rust目前在互联网上资料较少,经过几天的折腾,终于在Windows10和GithubActions(Ubuntu)上构建出了armv7和armv8的.so文件。关于JNI的配置见:【Rust实现JNI】https://juejin.cn/post/7092750468631740452交叉编译需要AndroidNDK,我目前使用的是android-ndk-r25c......
  • Android中的颜色设置
    1、在android中经常看到设置的颜色为八位的十六进制的颜色值,例如:publicstaticfinalclasscolor{publicstaticfinalintlightblue=0x7f040000......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......
  • 采用ComposeUI实现Android插件化
    什么是ComposeJetpackCompose是谷歌官方推荐的AndroidUI实现方式,避免了Android传统View在绘制、编写、性能等方面的种种缺点,具体使用方法请参考官方文档。Compose与插件化想必大家都接触过或者了解过插件化开发,没接触过的小伙伴们要补补课啦。在以往插件化开发过程中,清单文件中要......