每天进步一点点,距离大腿又近一步! 阅读本文大概需要9分钟
以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢!

1.反射

1.1定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。

1.2作用
①在运行时判断任意一个对象所属的类
②在运行时构造任意一个类的对象
③在运行时判断任意一个类所具有的成员变量和方法(通过setAccessible()方法可访问或修改private成员)
④在运行时调用任意一个对象的方法

1.3用法
首先得获取class字节码对象,再通过class对象可获取类中的各种属性和方法等
3种获取class对象方法:
1.通过Object类的getClass方法

Class clazz = foo.getClass();
2.通过对象实例方法获取对象

Class clazz = foo.class;
3.通过Class.forName方式

Class clazz = Class.forName("xx.xx.foo");//完整的类名,包括所在包
例子:

public class User {private String name;private int age;private void speak(String name){System.out.println("我的名字是:"+name);}public User(String name,int age)) {this.name = name;this.age = age;}}
User user = new User("张三",25);
// 获取User类中的所有方法
Method[] methods = User.class.getDeclaredMethods();
// 获取User类中的所有属性
Field[] fields = User.class.getDeclaredFields();
//遍历User类的所有属性
for (int i = 0; i < fields.length; i++) {fields[i].setAccessible(true);System.out.println(fields[i].getName()+":"+fields[i].get(user));}

结果:

name:张三
age:25
(反射基本上可以获取类中所有的信息,请自行谷歌)

1.4优缺点
优点:
1.能够运行时动态获取类的实例,大大提高了系统的灵活性和扩展性;
2.与java动态编译相结合,可以实现无比强大的功能。
缺点:
1.使用反射的性能较低;
2.使用反射来说相对不安全;
3.破坏了类的封装性,可以通过反射来获取这个类的属性和私有方法。

2.String、StringBuilder和StringBuffer的区别

  • 存储

    String:字符串常量,对象一旦创建,不可更改
    StringBuilder和StringBuffer:字符串变量,对象可更改

  • 执行速度
    String<StringBuffer<StringBuilder;
  • 线程安全
    String,StringBuilder是线程不安全的,StringBuffer是线程安全的。
  • 适用范围
    String:适用于少量的字符串操作
    StringBuilder:适用于单线程下,大量字符串操作
    StringBuffer:适用多线程下,大量字符串操作

3.单例模式

  • 作用
    保证在Java程序中,某个类只有一个实例存在。
  • spring中的单例模式
    spring生成对象默认是单例的,可将scope属性设置为prototype改为多实例
    <bean id="hi" class="com.test.Hi" init-method="init" scope="prototype">
  • 适用场景
    1.需要频繁的进行创建和销毁的对象;
    2.创建对象时耗时过多或耗费资源过多,但又经常用到的对象;
    3.工具类对象;
    4.频繁访问数据库或文件的对象。

4.Java 中 ++ 操作符是线程安全的吗?

不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。

5.== 与 equals 的区别

  • ==
    1.比较基本数据类型(int,float,double…)时,比较的是它们的值是否相等
    2.比较引用类型(比如String类,自定义的User类等),比较的是引用所指向的对象是否相等, 即对象内存地址是否相同
  • equals
    equals方法是由Object类提供的,可以由子类来进行重写

Object类默认的实现如下:

public boolean equals(Object obj) {return (this == obj);
}

默认的实现只有当对象和自身进行比较时才会返回true, 这个时候和 “==”是等价
的。
Java中很多类(String类 Date类 File类)等都对equals方法进行了重写,这
里拿常见的String类

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;
}

这里,从String的重写equals方法可以看出,比较的是String的所存放内容是否相等
equals方法其实是交给开发者重写,在自定义类里,你想用它比较什么都可以,只要你重写它,所以我们并不能单纯的说它是用来比较什么的

6.数组在内存中如何分配

**读前须知:
栈:存放对象引用
堆:存放所有new出来的对象和数组**

数组可以存放基本数据类型,可以存放引用类型。数组的引用存放于栈中,实际存放的对象在堆中。
可看以下代码及分析:

// 存放基本数据类型
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;// 存放自定义类型User
User[] userArr =new User[3];
User user1 = new User("张三");
User user2 = new User("李四");
user[0] = user1;
user[1] = user1;
user[2] = user2;

运行步骤分析:

存放基本数据类型
1.在栈中创建arr引用
2.在堆中创建长度3的int数组,并将其初始化,赋默认值0
3.将arr引用指向int数组
4.对int数组中每一个int值重新赋值

存放引用类型User
1.在栈中创建userArr引用
2.在堆中创建长度3的User数组,并将其初始化,赋默认值null
3.将userArr引用指向User数组
4.在栈中创建user1,user2引用
5.在堆中创建User("张三"),User("李四")对象
6.将user1,user2分别指向User("张三"),User("李四")
7.分别对User数组中的每一个User进行重新赋值,此时user[0]指向User("张三"),user[2]指向User("张三"),user[2]指向User("李四")
ps:这里所说的指向是引用变量指向对象,即引用变量保存了对象在堆内存中的存储地址
可看下图,更好的理解:
图片描述
ps:数组所存放的基本数据类型可能存放于堆中,也可能存放于方法区的常量池中,此处仅以堆中的基本数据类型为例。

后台回复"谷歌访问助手",获取插件访问谷歌,沉入信息的海洋


**end~thanks!
欢迎关注公众号"java从心"
一个立志成大腿而每天努力奋斗的年轻人
期待你的到来!**

java面试| 精选基础题(1)相关推荐

  1. Java面试精选72题

    文章目录 1. 多线程有几种实现方法?同步有几种实现方法? 2. JDBC 中的 PreparedStatement 相比 Statement 的好处? 3. Java 中实现多态的机制是什么? 4. ...

  2. Java面试的基础题20190301

    1. Excption与Error包结构.OOM你遇到过哪些情况,SOF你遇到过哪些情况. Java将可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException), ...

  3. Java面试的基础题20190000

    九种基本数据类型的大小,以及他们的封装类. 答:九种基本的数据类型:boolean, byte, char, short, int, long, float, double, void. 他们的类:B ...

  4. 好程序员Java培训分享20个Java程序员基础题

    好程序员Java培训分享20个Java程序员基础题1.谈谈final.finally.finalize的区别 final用于声明属性,方法和类,分别标识属性不可变,方法不可覆盖,类不可继承. fina ...

  5. Java面试之场景题汇总

    Java面试之场景题汇总 1. HashMap链表长度大于8后一定会转化为红黑树吗 2. ConcurrentMashMap分段锁之间加了什么锁,读写之间是互斥的吗? 3. 三次握手后如果一直不连接会 ...

  6. Java面试之场景题(精准到阿里看到都哇哇完)

    Java面试之场景题汇总 目录 1. HashMap链表长度大于8后一定会转化为红黑树吗 2. ConcurrentMashMap分段锁之间加了什么锁,读写之间是互斥的吗? 3. 三次握手后如果一直不 ...

  7. [剑指offer][JAVA][面试第40题][最小的k个数][快选][堆][BST]

    [问题描述]面试第40题 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 : 输入:arr ...

  8. java object... arguments_Java面试之基础题---对象Object

    参数传递:Java支持两种数据类型:基本数据类型和引用数据类型. 原始数据类型是一个简单的数据结构,它只有一个与之相关的值.引用数据类型是一个复杂的数据结构,它表示一个对象.原始数据类型的变量将该值直 ...

  9. Java面试易错题精选

    一.成员变量和局部变量的区别: 1:成员变量直接定义在类中. 局部变量定义在方法中,参数上,语句中. 2:成员变量在这个类中有效. 局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域. ...

  10. [ 转载 ] Java面试精选【Java基础第一部分】

    http://www.cnblogs.com/hnlshzx/p/3491587.html 转载于:https://www.cnblogs.com/ILoke-Yang/p/8137326.html

最新文章

  1. 求马鞍点java_二维数组马鞍点求解算法
  2. linux c++ 得到 指定进程名 线程数
  3. Microbit-高温报警系统
  4. python+html语音人物交互_使用Python读取HTML表并与之交互
  5. 怎么让员工服从管理_职场 | 在职场中,遇到不服从管理的员工,该怎么办呢?...
  6. SimpleDateFormat类 java 1614697530
  7. 基本排序(C语言版)
  8. nginx: [error] invalid PID number问题处理
  9. python前后台tcp/udp通讯示例
  10. linux修改登录密码门,Linux更改用户密码
  11. 全国地图poi数据下载
  12. 联想笔记本那些有手写功能_可以在屏幕上自由手写联想Android平板电脑的哪些软件?如何设置联想平板电脑的手写笔迹...
  13. SAA7113视频解码芯片介绍
  14. 我的网站防盗链和屏蔽蜘蛛的iis8.5 web.config功能
  15. python正则表达式match方法_Python match()函数:匹配正则表达式
  16. 利用kali hydra 暴力破解Windows7(hydra的基本用法)会继续更新
  17. 大规模优化方法(一)
  18. 十个免费的Web负载/压力测试工具
  19. Beyond Compare忽略时间对比
  20. CUDA安装失败-Nsight compute安装失败-如何测试CUDA是否安装成功?Reason: VS** was not found

热门文章

  1. php 安装scws,SCWS分词扩展在windows下的安装方法
  2. beta分布_浅谈分布之分布(beta分布)贝叶斯分析之1 精选
  3. centos7 防火墙_【Linux简单实用小命令001】CentOS 7、8的防火墙端口开放
  4. Kafka多数据中心部署灾备三要素
  5. 再也不学AJAX了!(三)跨域获取资源 ② - JSONP CORS
  6. 用 WebSocket 实现一个简单的客服聊天系统
  7. 如果你是中国普通式的IT人——总有些无关风月的执着
  8. visualcreators.com公司产品过滤漏洞!
  9. ERROR - ORA-12560: TNS:protocol adapter error
  10. 【自然框架】稳定版的Demo —— 三:主从表的维护方式