怎么拿下Android开发面试题?(一)

Hello,小伙伴们,最近秋招提前批开始啦,我也是准备和大家一起进入到实习的大军!我选择的岗位是Android开发,是我大学以来一起想从事的岗位,现在,终于可以如愿以偿了,但是呢,大家都知道,面试官会考察很多的基础知识,所以在这里跟大家分享一些我自己的复习总结。



第一章 Java方面

第一节 Java 基础部分

1.1 抽象类与接口的区别?

大体区别如下:
抽象类可以提供成员方法的实现细节,而接口中只能存
在 public 抽象方法;
抽象类中的成员变量可以是各种类型的,而接口中的成
员变量只能是 public static final 类型的;
接口中不能含有构造器、静态代码块以及静态方法,而抽
象类可以有构造器、静态代码块和静态方法;
一个类只能继承一个抽象类,而一个类却可以实现多个
接口;
抽象类访问速度比接口速度要快,因为接口需要时间去
寻找在类中具体实现的方法;
如果你往抽象类中添加新的方法,你可以给它提供默认
的实现。因此你不需要改变你现在的代码。如果你往接
口中添加方法,那么你必须改变实现该接口的类。
接口更多的为了约束类的行为,可用于解耦,而抽象类
更加侧重于代码复用。

1.2 分别讲讲 final,static,synchronized

关键字可以修饰什么,以及修饰后的作用?
static

1.static 方法

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

public class StaticTest
{ 
public static void a(){
}
public static voidmain(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

4.final 变量

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

private final int aa = 1;
static {
  a = 1;
  b = 2;
}
private void init(){
  aa = 2;//报错编译器会提示 不能赋值。。
}
5.final 方法

final也可以声明方法。方法前面加上 final 关键字,代表这
个方法不可以被子类的方法重写。如果你认为一个方法的
功能已经足够完整了,子类中不需要改变的话,你可以声明
此方法为 final。final 方法比非 final 方法要快,因为在编
译的时候已经静态绑定了,不需要在运行时再动态绑定。

public static void main(String[]args){ 
    StaticTest.a();
}
class StaticTest2 extends StaticTest{ 
public final void a(){ 
//这边就会编译器提示不能重写
}

6.final 类

其实更上面同个道理,使用 final 来修饰的类叫作 final
类。final 类通常功能是完整的,它们不能被继承。Java 中
有许多类是 final 的,譬如 String,Interger 以及其他包装类。


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

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

有效避免了类成员变量的访问冲突:

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

8.synchronized 代码块

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴天学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值