ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java面试高频点---牛客刷题总结(第二周)

2021-06-16 12:32:03  阅读:197  来源: 互联网

标签:文件 Java HashMap 对象 --- 牛客 File RMI 对应


1、集合中关于key和value是否允许为null以及Map继承结构

在这里插入图片描述
继承结构:
在这里插入图片描述

2、常见的代码优化技术

常见的代码优化技术有:复写传播、删除死代码、强度削弱、归纳变量删除

复写传播:
在这里插入图片描述
复写语句:形式为f = g 的赋值
优化过程中会大量引入复写
复写传播变换的做法是在复写语句f = g后,尽可能用g代表f
复写传播变换本身并不是优化,但它给其他优化带来机会
常量合并(编译时可完成的计算)

死代码删除:
死代码是指计算的结果决不被引用的语句
一些优化变换可能会引起死代码

代码外提:
代码外提是循环优化的一种
循环优化的其它重要技术
归纳变量删除
强度削弱
例如:

while(i <= limit - 2) ...
// 代码外提后变成
t = limit - 2;
while(i <= t) ...

归纳变量删除:

while(i <= limit - 2) ...
// 代码外提后变成
t = limit - 2;
while(i <= t) ...

j和t4的值步伐一致地变化,这样的变量叫作归纳变量
在循环中有多个归纳变量时,也许只需要留下一个
这个操作由归纳变量删除过程来完成
对本例可以先做强度削弱,它给删除归纳变量创造机会

强队削弱:
强度削弱的本质是把强度大的运算换算成强度小的运算,例如将乘法换成加法运算。

3、J2EE中常用的名词解释

1.web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
2.Web container: 实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
3.EJB容器: Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。 这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务, 配置,和其他的服务。
4.JNDI: (Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
5.JMS: (Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
6.JTA: (Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
7.JAF: (Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
8.RMI/IIOP: (Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。

4、File类的一些常用方法和说明

能够读写文件的是数据流(OutputStream和InputStream)

在这里插入图片描述
File类的一些常用方法和说明

1、访问文件名相关方法:

a: String getName(); 返回此File对象所表示的文件名和路径名(如果是路径,则返回最后一级子路径名)。

b: String getPath(); 返回此File对象所对应的路径名。

c: File getAbsolutePath(); 返回此File对象所对应的绝对路径名。

d: String getParent(); 返回此File对象所对应目录(最后一级子目录)的父路径名。

e: boolean renameTo(File newName); 重命名此File对象所对应的文件或目录,如果重命名成功,则返回true:否则返回false.(A)

2、文件检测相关方法
a: boolean exists(); 判断File对象所对应的文件或目录是否存在。

b: boolean canWrite(); 判断File对象所对应的目录或文件是否可写。

c: boolean canRead(); 判断File对象所对应的目录或文件是否可读。

d: boolean isFile(); 判断File对象所对应的是否是文件,而不是目录。

e: boolean isDirectory(); 判断File对象所对应的是否是目录,而不是文件。

f: boolean isAbsolute(); 判断File对象所对应的文件或目录是否是绝对路径。该方法消除了不同平台的差异,可以直接判断File对象是否为绝对路径。在UNIX/Linux/BSD等系统上,如果路径名开头是一条斜线(/),则表明该File对象对应一个绝对路径;在Windows等系统上,如果路径开头是盘符,则说明它是绝对路径。

3、获取常规文件信息

a: long lastModified(); 返回文件最后修改时间。

b: long length(); 返回文件内容的长度。

4、文件操作相关的方法
a: boolean createNewFile(); 当此File对象所对应的文件不存在时,该方法将新建的一个该File对象所指定的新文件,如果创建成功则返回true;否则返回false.©

b: boolean delete(); 删除File对象所对应的文件或路径。

c: static File CreateTempFile(String prefix,String suffix);在默认的临时文件目录创建一个临时空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File来调用。preFix参数必须至少是3个字节长。建议前缀使用一个短的、有意义的字符串。建议前缀使用一个短的、有意义的字符串,比如”hjb“ 或”main”. suffix参数可以为null,在这种情况下,将使用默认的后缀”.tmp”.

d: static File CreateTempFile(String prefix,String suffix,File directory);在directory所指定的目录中创建一个临时空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File来调用。

e: void deleteOnExit(); 注册一个删除钩子,指定当Java虚拟机退出时,删除File对象随对应的文件和目录。

5、目录操作相关方法
a: boolean mkdir(); 试图创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false. 调用该方法时File对象必须对应一个路径,而不是一个文件。

b: String[] list(); 列出File对象的所有子文件名和路径名,返回String数组。

c: File[] listFiles(); 列出File对象的所有子文件和路径,返回File数组。

d: static File[] listRoots(); 列出系统所有的根路径。这是一个静态方法,可以直接通过File类来调用。

5、关于hashMap和hashTable的一些知识点

  1. 关于HashMap的一些说法:
    a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。

b) HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。

c) HashMap实现不同步,线程不安全。 HashTable线程安全

d) HashMap中的key-value都是存储在Entry中的。

e) HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

f) 解决冲突主要有三种方法:定址法,拉链法,再散列法。HashMap是采用拉链法解决哈希冲突的。 注: 链表法是将相同hash值的对象组成一个链表放在hash值对应的槽位; 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。 沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。 拉链法解决冲突的做法是: 将所有关键字为同义词的结点链接在同一个单链表中 。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0…m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。拉链法适合未规定元素的大小。
2. Hashtable和HashMap的区别:
a) 继承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map

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

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

d) 两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

e) 哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

f) Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 注: HashSet子类依靠hashCode()和equal()方法来区分重复元素。 HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值的,会去判断当前Map中是否含有该Key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

标签:文件,Java,HashMap,对象,---,牛客,File,RMI,对应
来源: https://blog.csdn.net/weixin_45827693/article/details/117659994

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有