您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Java 最常见的 208 道面试题.pdf
  所属分类: Java
  开发工具:
  文件大小: 1mb
  下载次数: 0
  上传时间: 2019-07-06
  提 供 者: xiaofei*******
 详细说明:Java 最常见的 208 道面试题以及答案,超级详细!return false: 原来是 String重写了 Object的 equals方法,把引用比较改成了值比较。 总结:=对于基本类型米说是值比较,对于引用类型来说是比较的是引用;而 equals默 认情况下是引用比较,只是很多类重新了 equals方法,比如 String、 nteger等把它变成了 值比较,所以一般情况下 equals比较的是值是否相等。 3.两个对象的 hash Code(相同,则 equals(也一定为true, 对吗? 不对,两个对象的 hashCode相同, equals5()不一定true。 代码示例: String str1="通话 string str2="重坫"; System. out. printIn(String. format("str1:%d I str2: %d",str1 hashCode(), str2 hashCode()) System. out. println(str1 equals(str2)); 执行的结果 str1:1179395|str2:1179395 代码解读:很显然“通话飞和“重地”的 hashCode0相同,然而 equals0则为flse,因 为在散列表中, hashcodel相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能 得出键值对相 4fnal在java中有什么作用? fina修饰的类叫最终类,该类不能被继承。 fina修饰的方法不能被重写, fina修饰的变量叫常量,常量必頒初始化,初始化之后值就不能被修改。 5.java中的 Math. round(-15)等于多少? 等于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负0.5 是直接舍弃 6. String属于基础的数据类型吗? String不属于基础类型,基础类型有8种:byγte、 boolean、char、shot、int、foat、long、 doub|e,而 String属于对象。 7.java中操作字符串都有哪些类?它们之间有什么区别? 操作字符串的类有: String、 String Buffer、 String Builder String和 String Buffer, String Builder的区别在于 String声明的是不可变的对象,每次操作 都会生成新的ting对象,然后将指针指向新的 String对象,而 StringBuffer、 String Builder 可以在原有对象的基础上进行操作,所以在经常改变字符串内的情况下最好不要使用 String。 String Buffer和 tring Builder最大的区别在于, StringBuffer是线程安全的,而 String Builder 是非线程安全的,但 String Builder的性能却高于 String Buffer,所以在单线程环境下推荐使 用 String Builder,多线程环境下推荐使用 StringBuffer。 8. String str="i"与 String str= new string("i")一样 吗? 不一样,因为内存的分配发或不一样。 String str==“的方式,java虚拟机会将其分配到常量 池中;而 String strsnew string("i)则会被分到维内存中。 9.如何将字符串反转? 使用 String Builder或者 string Buffer的 reverse()方法。 示例代码: / StringBuffer reverse StringBuffer stringBuffer new StringBuffer o: stringBuffer, append ("abcdefg"); System.out. printIn(stringBuffer reverse o);// gfedcba StringBuilder reverse StringBuilder stringBuilder new StringBuildero defg"); System. out. printIn(stringBuilder reverse());// gfedcba 10. String类的常用方法都有那些? indexof():返回指定字符的索引 charAti():返回指定索引处的字符。 replace():字符串替换。 trim():去除字符串两端空仁 split():分割字符串,返回一个分割后的字符串数组。 getBytes():返回字符串的byte类型数组 ength():返回字符串长度。 tolower case():将字符串转成小写字母 toUpperCase:将字符串转成大写字符 substring():截取字符串。 equals():字符串比较 1.:象类必须要有抽象方法吗? 不需要,拍象类不一定非要有抽象方法 示例代码: abstract class Cat i public static void sayHi()) System. out. printIn( 上面代码,抽象类蛘没有抽象方法但完全可以正常运行。 12.普通类和抽象类有哪些区别? 普通类不能包含抽象方法,抽象类可以包含抽象方法 抽象类不能直接实例化,普通类可以直接实例化。 13.抽象类能使用 final修饰吗? 不能,定义抽象类就是让其他类继承的,如果定义为fina该类就不能被继承,这样彼此就 会产生矛盾,所以fina不能修饰抽象类,如下图所示,编辑器也会提示错误信息: final abstract class Cat legal combination ot modifiers: abstra=t and final 14.接口和抽象类有什么区别? 实现:抽象类的子类使用 extends来继承:接口必须使用 implements来实现接口 构造函数:抽象类可以有构造函数;接口不能有。 man方法:抽象类可以有man方法,并我们能运行它;接口不能有man方法。 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。 访问修饰符:接口中的方法默认使用pbc修饰:抽象类山方法以是任意访间修饰符。 15. public、 private和 protected的区别 1、 public:pubc表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进 行调用 2、 private: private表示私有,私有的意思就是除了cass己之外,任何人都不可以直接使 用,私有财产神圣不可侵犯嘛,側便是子女,朋友,都不可以使用。 3、 protected: protected对女朋友米说,就是 public的,可以自由使用,没有任何限 制,而对于其他的外部 class.protected就变成 private 作用域 义前类 同 package 子孙类 其他 package public protected × default Private 16.java中I0流分为几种? 按功能米分:输入流( input)、输出流( output)。 按类型来分:宁节流和字符流。 字节流和字符流的区别是:宇节流按8位传输以字节为单位输入输岀数据,字符流按16位 传输以字符为单位输入输出数据。 字节流:继承自 Inputstream和 OutputStream 字符流:继承自 Inputstream Reader和 OutputstreamWriter 17.字节流有字符流的区别? 宇节沇操作的最基本的单元是字节,字符流操作的基本单位是宇符,也就是 Unicode 码元。 字节流默认不使用缓冲区,字符流使用缓冲区 在硬盘上的所有文件都是以字节形式存在的(图片,声音,视频),而字符只在内 存中才会形成。 17.BIO、NIO、AI0有什么区别? Bo: Block io同步阻寒式⑩o,就是我们平常使用的传统1o,它的特点模式简单使用方 便,并发处理能力低。 NO:NeW|o同步非阻塞|o,是传统0的升级,客户端和服务器湍通过 Channel(遥道) 通讯,实现了多路复用。 AO: Asynchronous IO是NO的升级,也叫No2,实现了异步非堵塞o,异步10的操 作基于事件和回调机尙。 17. Files的常用方法都有哪些? Files. exists(:检测文件路径是否存在 Files, create|le():创建文 Files create Directory:创建文件夹 Files . delete0除或目录。 Files. copy(!:复制安伸。 Files move():秒动文件 Files size(A看文件个数。 Files, read:ˉ犊取文件。 Files write():写入文件。 2容器 18. Collection和 Collections有什么区别? ollection是集合类的上级接口,继承于它的接口主要有Set和uist Collections是针对集合类的一个帮助类,它提供了一系列静态方法实现∫对各种集合的排 序,搜索和线程安全等操作,而且这个类不能被实例化 19.List、Set、Map之间的区别是什么? 比较 Map 继承 collection Collection 接口 常见 Abstractset(其常用子类有 实现 Abstractlist(其常用子类有 Hashset. LinkedHashset. HashMMap、 Hash Table Treeset 常见add(). remove(). clear( add(). remove(). clear(). put(), get(). remove () clear( ), containsKey(), 方法 et(). contains(. size() contains() size( containsvalue(). keySet(). values( ) size() 元素 可重复 不可重复(用equa1s()判断 不可重复 顺序 有序 无序实际上由 Hashcode定) Vecto线程安全 sta和线程安全 21. HashMap和 Hashtable有什么区别? (1)继承父类不同: Hashtable继承 Dictionary类,而 HashMap继承 AbstractMap类,但是 二者都继承了Map接口 (2)线程安全性不同: Hashtable z是线程交全面因为它的每个方法都加入了Shon 对整个 Table加了锁。 Hash Map是线程不安全的。 HashMap底层是一个Enty数组,当发生hsh冲突的时候, hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言, 新加入的节点会从头结点加入 我们来分析一下多线程访问 1)在 hashmap做put操作的时候会调用 addEntry方法 现在假如A线程和B线程同时对同一个桶调用 addEntry,两个线程会同时得到现在的头 结点,然后A写入新的结点之后,B也写入新的头结点,那B的写入操作就会覆盖A的写 入操作造成A的写入操作丢失。 2)*调删除键值对方法* FremoveEntry Forkeylobject key 多个线程对同一个桶操作时,同时得到数组中的头结点,并发访问和修改,会造成修改 矍盖 3)put新的键值对后,若键值对总数量超过门限值的时侯会调用一个rese操作 这个操作会新生成一个新的容量的数组,然后对原数组的所有键值对重新进行计算和写 入新的数组,之后指向新生成的数组 当多个线程同时检测到总数量超过门限值的时候就会同时调用 resize操作,各自生成新 的数组并 rehash后赋给该map底层的数组 table,结果最终只有最后一个线程生成的新数组 被赋给 table变量,其他线程的均会丢尖。而且当某些线程已经完成赋值而其他线程刚开始 的时候,就会用已经被赋值的 table作为原始数组,这样也会有问题 (3) Hash Map把 Hashtable的 contains方法去掉」,改成 containsvalue和 containsKey Hashtable则保留了 contains, contains value和 containskey三个方法,其中 contains和 contains value功能相同 (4) Hash Map中,nu可以作为键,这样的键只有一个:可以有一个或多个键所对应的值 为ηul当εet0方法返回nu值时,可能是 HashMap中没有该键,也可能使该键所对应的 值为null因此,在 HashMap中不能由get(方法来判断 Hash Map中是否存在某个键,而 应该用 containsKey(方法来判断。 Hashtable中,keγ和 value都不允许出现nu值 (5)两个遍历方式的内部实现上不同 ash Map使用 Iterator Hashtable使用 Iterator,还使用了 Enumeration的方式 (6)hash值不司 Hashtable直接使用对象的 hash Code。而 Hash Map重新计算hash值。 hashCode是jdk根据对象的地址或者字符串或者数宁算出来的int类型的数值 Hash Map重新计算了key的hash值, HashMap在求位置索引时,则用与运算,即 hash&(length -1 Hashtable计算hash值:直接用key的 hashCode(), Hashtable在求hash值对应的位置索引 时,用取模运算,且这里一般先用hash&0 OX7FFFFFFF后再对 length取模,&0X7FFFF 的目的是为了将负的hash值转化为正值,因为相ash可能为负数,而&0xFFF后, 只有符号外改变,而后面的位都不变。 (7)内部实现使用的数组初始化和扩容方式不同 Hash Table初始默认容量为11, Hashtable不要求底层数组的容量一定要为2的整数次幂, Hashtable扩容时,将容量变为原的2倍加1, 而 HashMap初始默认容量为为6而 Hash Map则要求一定为2的整数次幂,而 Hash Map 扩容时,将容量变为原来的2 21 Hash Map和 ConcurrentHash Map的区别 Hash Map是线程不安全的, ConcurrentHash Map是线程安全的,他和 hashtable不同, hashTable 是每个方法都加 synchronized,而 ConcurrenthashMap引入了分段锁的概念,就是把Map 分成了N个 segment,put和get的时侯,都是现根据 key hash Code0(算出放到哪个 Segment Segments的初始化长度是16 20.解决Hash碰撞冲突方法 开放地址法 开放地执法有一个公式H=(H(key)+ di) mod m i=1,2,…k(k<=m-1) 其中,m为哈希表的表长。d是产生冲突的时候的增量序列。如果di值可能为1,2,3,…m-1 称线性探测再散列。 如果di取1,则每次冲突之后,向后移动1个位置.如果di取值可能为 1,-1,2-2,4,-4,9,9,16-16,…k*k,-k*k(k<=m/2),称二次探测再散列。 如果di取值可能为伪随杋数列。称伪随机探测再散列。 再哈希法 当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时。缺点:计算时间 增加。 比如上面第次按照姓首字丹进行哈希,如果产生冲突可以按照姓字母首宇母第二位进行哈 希,再冲突,第三位,直到不冲突为止 链地址法(拉链法) 将所有关键字为同义词的记录存储在同一线性链表中。如下 495 896 337 353 2 4 6 184 net 10 91 71 12 12啾18·“108140亠 13 14 15 因此这种方法,可以近似的认为是筒子里面套筒子 建立一个公共溢出区 假设哈希函数的值域为[0,m-1],则设向量 HashTable[0.m-1]为基本表,另外设立存储空间向量 OverTable[0.用以存储发生冲突的记录。 拉链法的优缺点: 优点 ①拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较 ②由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情 况:
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: java208道
 输入关键字,在本站1000多万海量源码库中尽情搜索: