java面试②基础部分
java中有几种基本数据类型?

2.1.4. 面向对象的特征有哪些方面
有四大基本特征:封装、抽象、继承、多态
1)封装,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。
张三这个人,他的姓名等属性,要有自己提供的获取和改变的方法来操作,(getter,setter)
2)抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。
就是把现实生活中的对象,抽象为类。
3)在定义一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承
4)多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
靠的是父类或者接口的引用变量可以指向子类或者具体实现类的实例对象,而程序调用的方法在运行期间才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型定义的方法。
原则:围着比较抽象问题的时候,要举例说明
- 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
- 类可以实现很多个接口,但是只能继承一个抽象类
- 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
- 抽象类可以在不提供接口方法实现的情况下实现接口。
- Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
- Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
- 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的
2.1.5 有了基本数据类型,为什么还要包装类型?
基本数据类型,java中提供了8中基本数据类型,boolean int float等
包装类型:每一个基本数据类型都会一一对应一个包装类型,
boolean—Boolean
int—Integer
装箱和拆箱
把基本的数据类型转换成对应的包装类型,
Integer i = 1;自动装箱,实际上在编译时会调用Integer.valueOf方法来装箱
拆箱:就是把包装类型转换为基本数据类型, 基本数据类型 名称 = 对应的包装类型。
int j = i 自动拆箱
int j = i.intValue()手动拆箱
自动拆箱:实际上会在编译调用intValue
java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。
Null Integer-->null int-->0 用Integer和int分别表示Person这个类的id
max 最大值
min 最小值
缓存值:对象缓存,Integer i = 1; Integer j = 1;--> i == j;
缓存-128~127
2.1.6 说一下“==”和equals方法究竟有什么区别
非常经典的一个面试题?先说清楚一个,再说另外一个?
==用来判断两个变量之间的值是否相等,变量就可以分为基本数据类型变量,引用类型,如果是基本数据类型的变量直接比较值而引用类型要比较对应的引用的内存的首地址。
equals:用来比较两个对象长得是否一样,判断两个对象的某些特征是否一样。实际上就是调用对象的equals方法进行比较。
2.1.7 讲一下String和StringBuilder的区别,StringBuffer和StringBuilder的区别?
1)在java中提供三个类String、StringBuilder、StringBuffer来表示和操作字符串,字符串就是多个字符的集合。
String是内容不可变的字符串,Stirng底层使用了一个不可变的字符数组(final char[]),
String str = new String(“bbb”); ----private final char value[]
而StringBuilder和StringBuffer是内容可以改变的字符串,StringBuilder和StringBuffer底层使用的是可变数组(没有使用final来修饰)----char value[]
2)最经典就是拼接字符串
1.String进行拼接String c = “a”+”b”;
2.StringBuilder或StringBuffer
StriingBuilder sb = new StringBuilder();sb.append(“a”).append(“b”);
拼接字符串不能使用String进行拼接,要使用StirngBuilder或者StringBudder
3)Stringbuilder是线程不安全的,效率较高,而StringBuffer是线程安全的,效率较低。
2.1.8 将一下java集合
java中的集合为value,key-value(Map)两种
存值的又分为List和Set
List是有序的,可重复的。
Set是无序的,不可重复的。根据equals和hashcode判断,也就是如果一个对象要存储在Set中,必须重写hashcode方法。
存key-value的为Map
2.1.9 ArrayList和LinketSet的区别
List常用的ArrayList和LinkedList。区别和使用场景
ArrayList底层使用的是数组,LinkedList使用的是链表。
数组查询具有索引查询特定元素比较快,而插入和删除和修改比较慢(数组在内存中是一块连续的内存,如果删除插入需要移动内存)
链表不要求内存是连续的,在当前元素中存放下一个或者上一个的地址,查询时需要从头部开始,一个个的找,所以效率低,插入时不需要移动内存,只需改变指向即可,所以插入效率或者删除效率高。
ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较少而插入和删除比较多的情况
2.1.10 讲一下HashMap和HashTable的区别?HashMap和ConcurrentHashMap的却别
1)HashMap和HashTable都可以使用来存储key-value的数据。
2)HashMap是可以把null作为key或者value的,而hashTable是不可以的
3)HashMap是线程不安全的,效率高。HashTable是线程安全的,效率较低。
通过把整个Map分为N个segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。
2.1.11 实现一个拷贝文件的工具类使用字节流还是字符流。
我们拷贝的文件不确定是只包含字符流,有可能有字节流(图片、声音、图像等)。为了考虑通用性,要使用字节流。
2.1.12 讲一下线程的几种实现方式?
1.实现方式:
1)通过继承Thread类实现一个线程。
2)通过实现Runable接口一个线程
继承扩展性不强,java只支持单继承,如果一个类继承Thread就不能继承其他的类了。
2.启动方式:
Thread t = new Thread();继承了Thread的对象/实现Runable的对象。
t.setName()设置一个线程名称。
t.start();
启动线程使用start方法,而启动了以后执行的是run方法。
3.怎么区分线程,在一个系统中有很多线程,每个线程都会打印日志,我区分哪个线程打印的怎么办。
t.setName()”设置一个线程名称”;这是一种规范,在创建线程完成后,都需要设置名称。
2.1.13 有没有使用过线程并发库?
简单了解过。创建线程池。
java通过Excute提供四个静态方法创建四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,灵活回收空闲线程,无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
线程池的作用:
1)限定线程的个数,不会导致由于线程过多导致系统运行缓慢或者崩溃。
2)线程池不需要每次创建或者销毁,节约资源。
3)线程池不需要每次创建,响应时间快。
连接池也是一样
2.1.14 讲一下什么是设计模式?常用的设计模式有哪些?
设计模式就是经过前人无数次的实践总结的,设计过程中可以反复使用的,可以解决特定问题设计方法。
单例模式:懒汉模式、 饿汉模式
1)构造方法私有化,让除了自己类能创建外其他地方都不能创建
2)在自己的类中创建一个单实例(饿汉模式是一出来就创建单实例,而懒汉模式需要的时候才创建)
3)提供一个方法获取该实例对象(创建需要进行方法同步)
场景:
4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。
6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损 耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
工厂模式:Spring IOC 就是使用了工厂模式
对象的创建交给一个工厂去创建
代理模式:Spring AOP 就是使用的动态代理
java面试②基础部分的更多相关文章
- JAVA面试基础
JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...
- java面试基础题(三)
程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...
- Java面试基础部分合集
写在前面:这篇文章对于在Java方面已经很牛逼的大手,就没必要看了,因为对于你们来说,这tm简直太简单了.... 面试我们都经历过,你真的懂面试吗?针对面试我只想说一点,面试的目的不是让考官知道你怎么 ...
- Java面试基础概念总结
面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...
- JAVA 面试基础
经典的Java基础面试题________________________________________________________________________________________ ...
- Java 面试基础总结(一)
1.九种基本数据类型的大小以及它们的封装类 java提供的九种基本数据类型:boolean.byte(1).char(2).short(2).int(4).long(8).float(4).doubl ...
- java面试基础篇(一)
最近想深入的理解一下java 的工作机制,也是便于后期的面试. 1.A:HashMap和Hashtable有什么区别? Q:HashMap和Hashtable都实现了Map接口,因此很多特性非常相似. ...
- java面试基础篇(三)
1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...
- java面试基础必备
一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... ...
随机推荐
- 团队项目第六周——Alpha阶段项目复审
排名 队名 项目名 优点 缺点 1 大猪蹄子队 四六级背单词游戏 功能开发出来了,界面简洁美观. 功能的确开发出来了,但是还未完成整个程序.不过考虑到开发时长问题,可以理解.页面还是比较简洁,但是测试 ...
- Android-Java卖票案例-推荐此方式Runnable
上一篇博客 Android-卖票案例static-不推荐此方式,讲解了卖票案例是 private static int ticket = 10;,static静态的这种方式来解决卖票多卖30张的问题, ...
- Oracle 监听服务启动不了
解决方法: 重新生成listener.ora文件 实施步骤 1,打开Net Configuration Assistant 2, 3, 4, 5, 6, 7,
- jQuery基础【1】
jQuery 是一个“写的更少,但做的更多”的轻量级 JavaScript 库.jQuery 极大地简化了 JavaScript 编程.jQuery 很容易学习.jQuery 库位于一个 JavaSc ...
- Asp.net MVC + Redis(Linux安装Redis)
最近有幸在工作中用到了redis,玩的还算开心.但是发现Redis在Windows上并不是满血状态的,所以决定安装一个Linux的虚拟机,让Redis在Linux上运行. 虚拟环境 虚拟机,我已经玩了 ...
- Elasticsearch、Kibana Windows下环境搭建
Elasticsearch 簡介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是 ...
- BitAdminCore框架更新日志20180516
前言 经过多次的重构,目前BitAdminCore框架已经基本上稳定,近期对代码进行多次重构,让代码保持更整洁. 为促进框架的推广,更好的实现价值分享,即日起推出更新日志系列,每次更新内容进行描述. ...
- 用input标签 文件,多文件上传
单个文件,多个文件区别不大,只是需要把多个文件装在一个容器里面,循环遍历即可: 需要注意的 input 标签中name属性,一定要指定: 在这是 fileBase 需要确定method必须是pos ...
- 先装VS2008之后,又装了2013,然后启动VS2008提示“Tools Version”有问题?
这个网上资料一搜很多,我就是按照下面这个链接去解决的,删除 “14.0” 整个键值文件夹之后重启VS2008就好了, 注意:上面第一张图是我在网上找的08和10版本弹出的错误,我自己弹出的是提示14. ...
- beyondCompare试用期到期解决办法
找到beyond Compare 4文件夹下面的BCUnrar.dll,将其删掉或者重命名,再重新打开接着使用! 我这是转的,到期之后试试.