java知识 快问快答

1、面向对象的特征有哪些方面?
封装,继承,多态

2、访问修饰符public,private,protected,以及不写(默认)时的区别?
全看得见,全看不见,子类能看见,同一个包下能看见

3、String 是最基本的数据类型吗?
不是

4、float f=3.4;是否正确?
不正确,应该是float f = 3.4f. 3.4是double

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
前面有错,因为等号右边变INT。后面没错。

6、Java有没有goto?
保留字,未来可能会用。

7、int和Integer有什么区别?
一个是基本类型,一个是OBJECT

8、&和&&的区别?
前者会全部算完。 后者如果表达式一旦出现一个FALSE,后面的就不算了。

9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
堆存实际对象,栈存指针,静态区存静态常量,CLASS,全局变量。

10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
12,-11

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
能在BYTE, JDK 6还7后能在STRING,原理用HASHCODE映射到INT。 Long不行。

12、用最有效率的方法计算2乘以8?
2<<3

13、数组有没有length()方法?String有没有length()方法?
数组有length,无length()方法
String 有

14、在Java中,如何跳出当前的多重嵌套循环?
3种吧。第一, 设计一个标志,BREAK 到那个标志
第二,THROW EXCEPTION
第三,外层循环,加一个BOOLEAN。 内存循环BREAK前,把那个BOOLEAN 给FALSE了。终结外层循环

15、构造器(constructor)是否可被重写(override)?
不可以

16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对

17、是否可以继承String类?
是FINAL的 继承不了

18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
引用传递,如数组

19、String和StringBuilder、StringBuffer的区别?
STRING不可变对象;BUILDER是可变STRING,可以动态APPEND。最后那个是STRING BUILDER的线程安全版。

20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重载,就是同样的方法名 不同传参。 不能根据返回类型区分。
重写,就是子类替换掉父类的方法的行为,和父类同方法名,同参数,同返回类型。

21、描述一下JVM加载class文件的原理机制?
自底向上查有没有没加载,自顶向下去加载这个类。

22、char 型变量中能不能存贮一个中文汉字,为什么?
能,一个中文汉子需要16位,如果一个CHAR是8位是不够。JAVA里一个CHAR 是16位的,可以存放。

23、抽象类(abstract class)和接口(interface)有什么异同?
abstract class 可以有实现的方法,可以有属性,只能被继承一次。
interface 都是声明方法,JDK 8 可以有DEFAULT实现。可以被实现多个。可以有public static final 属性。

24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
一个只能访问外部静态资源。一个没有这个限制。但是必须通过NEW一个父类,才能引用的到内部类的东西。

25、Java 中会存在内存泄漏吗,请简单描述。
会。SOFT REFERENCE 解决的,WEEKHASHMAP解决的 情况。

26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
全不能。

27、阐述静态变量和实例变量的区别。
一个一定要有实例才能用。一个不需要。

28、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
除非在静态方法里NEW出按个对象,不然不行。

29、如何实现对象克隆?
CLONEABLE接口实现后,调用CLONE()

30、String s = new String("xyz");创建了几个字符串对象?
2个,一个在STRING常量池,一个在堆。

31、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
1.都可以

32、一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以,其他类不要是PUBLIC的

33、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
都可以 。

34、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
就静态内部类不行。只能访问包含类的静态资源。

35、Java 中的final关键字有哪些用法?
属性上,JVM final语义,保证创建时的内存可见性。其次一旦赋值后,不可变。
方法上,表示该方法不能被重写
类上,该类不能被继承。

36、数据类型之间的转换:
???

37、如何实现字符串的反转及替换?
如果是算法,我就先不写了。 用工具的话new StringBuilder(s).reverse().toString()
s.replace("from","to");

38、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
new String(s.getBytes("GB2312"),"ISO-8859-1");

39、日期和时间:
Date Calendar Time SimpleDateFormat

40、打印昨天的当前时刻。
new Date(new Date().getTime() - 86400*1000)

41、比较一下Java和JavaSciprt。
一个有虚拟机,一个没有。
一个是强类型,一个是动态类型。

42、什么时候用断言(assert)?
判断一个变量应该是什么的时候。比如assert(a!=null)

43、Error和Exception有什么区别?
ERROR一般由JVM本身抛出。
EXCEPTION是程序员自己定义。

44、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
会被执行,RETURN 前。

45、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
throw 主动抛出异常。
throws 声明方法可以抛哪些异常
try catch finally 3件套

46、运行时异常与受检异常有何异同?
运行时异常不用声明,不要求一定要处理。
受检异常要么TRY CATCH 要么THROWS

47、列出一些你常见的运行时异常?
数组越界,除以0,还有IILEGALARUMENT

48、阐述final、finally、finalize的区别。
前者是个定义。上面回答过。 后者是套代码,表示无论有没有异常,FINNALY都要做的事。
finalize 是OBJECT的一个方法,在它被垃圾回收器收集的时候可以调用一下这个方法。

49、类ExampleA继承Exception,类ExampleB继承ExampleA。

请问执行此段代码的输出是什么?
??? 是想考就近原则吗。EAMPLEB 被抛出,EXAMPLE A 和EXCEPTION catch ,应该被CATCH住的是ExampleA这个方法块。

50、List、Set、Map是否继承自Collection接口?
Map 不是

51、阐述ArrayList、Vector、LinkedList的存储性能和特性。
前者适合O1读,最后那个适合O1 插,特别适合插在头部。
VECTOR是线程安全的

52、Collection和Collections的区别?
前者是个接口,后者是工具类

53、List、Map、Set三个接口存取元素时,各有什么特点?
add,get// put ,get remove// add,remove,contains
后面2个都有唯一的特性。有没有序的问题当然TREEMAP,LINKEDHASHMAP另说哈

54、TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
1.KEY得是实现COMPARABLE的,或者构造MAP的时候传一个COMPARATOR
2.同上

55、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
sleep 不释放锁。而且有时限
WAIT释放锁,要等NOTIFY。

56、线程的sleep()方法和yield()方法有什么区别?
YIELD是交出CPU调度权,SLEEP 就是线程挂起一段时间,同时能响应INTERRUPTED EXCEPTION。

57、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
要看这个方法是不是静态方法。

58、请说出与线程同步以及线程调度相关的方法。
synchronized. wait & notify. lock. countdownlatch,cyclicbarrier,semaphore,exchange.
threadpool. fork/join

59、编写多线程程序有几种实现方式?
继承THREAD 类。
实现RUNABLE接口
匿名内部类NEW THREAD,或传一个NEW RUNNABLE
线程池。
Timer 定时器
CALLABLE with FUTURE TASK

60、synchronized关键字的用法?
套实例方法(实例对象),静态方法(CLASS对象),或者一个方法块(自己申明OBJECT)。

61、举例说明同步和异步。
异步就是你发了请求,可以先去忙别的,事后再回调。同步就是一直等,等到那边响应你。

62、启动一个线程是调用run()还是start()方法?
START

63、什么是线程池(thread pool)?
很多线程调度,线程池会按需为你动态的分配线程资源和创建线程资源和回收线程资源。

64、线程的基本状态以及状态之间的关系?
NEW , RUNNABLE,BLOCKED,WAITED,TIME_WAITED,TERMINATE

65、简述synchronized 和java.util.concurrent.locks.Lock的异同?
一个是JVM内置的实现。
另外一个需要手动调用,自己LOCK,UNLOCK。同时支持公平,可重入,可中断,可限时。

66、Java中如何实现序列化,有什么意义?
实现Serializable,可以变成2进制进行传输。

67、Java中有几种类型的流?
InputStream 字节流。byte[]
InputStreamReader 字符流 char[]

68、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

 public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader(new File("1.txt"));
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuilder stringBuilder = new StringBuilder();
        String s;
        while((s = bufferedReader.readLine()) != null){
            stringBuilder.append(s);
        }
        String fileContent = stringBuilder.toString();
        String needToSearch = "12";
        int cnt = 0;
        int idx;
        while((idx = fileContent.indexOf(needToSearch)) != -1){
            cnt++;
            fileContent = fileContent.substring(idx+needToSearch.length());
        }
        System.out.println(cnt);
    }

69、如何用Java代码列出一个目录下所有的文件?

public static void main(String[] args) throws IOException {
        File d = new File("D://");
        for(File f : d.listFiles()){
            System.out.println(f.getName());
        }
    }

如果需要递归的打印的话

public static void main(String[] args) throws IOException {
        myPrintFile(new File("E:\\BaiduNetdiskDownload\\liuyubo"),"");
    }
    private static void myPrintFile(File file,String level) {
        System.out.println(level+file.getName());
        if(file.isDirectory()){
            for(File f:file.listFiles()){
                myPrintFile(f,level+"\t");
            }
        }
    }

70、用Java的套接字编程实现一个多线程的回显(echo)服务器。

public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(PORT);
        while(true){
            final Socket client = serverSocket.accept();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
                        PrintWriter pw = new PrintWriter(client.getOutputStream());
                        pw.println(br.readLine());
                        pw.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally {
                        try {
                            client.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }
while(true){
            Socket socket = new Socket("localhost",5678);
            OutputStream op = socket.getOutputStream();
            PrintWriter printWriter = new PrintWriter(op,true);
            Random r = new Random();
            printWriter.println("hello"+r.nextInt());
            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String line = reader.readLine();
            System.out.println(line);
            Thread.sleep(5000);
        }

71、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
DTD 和SCHEMA。
SCHEMA更强强大一些,支持的语法更多。
DOM 是会把XML一次性加载进内存并构建一棵树
SAX是基于流一点一点读,碰到需要的就会响应。


image.png

72、你在项目中哪些地方用到了XML?
SPRING , WEB.XML, webservice 发数据。

73、阐述JDBC操作数据库的步骤。
1.加载DRIVET。 2.连接。 3.拼接SQL语句。 4.执行 5.拿到返回结果。 6.关闭

74、Statement和PreparedStatement有什么区别?哪个性能更好?
后者更好,比前者多3个优点。
1.更安全,不用字符串拼SQL,可以防止SQL注入
2.更高效,执行相同的查询,会有编译后的SQL缓存。
3.可读性更好

75、使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
读数据的时候,可以通过结果集(ResultSet)对象的setFetchSize()方法指定每次抓取的记录数。
写数据的时候,批量写,一次COMMIT

76、在进行数据库编程时,连接池有什么作用?
创建和释放连接都有很大的开销。可以在启动的时候,先创建几个连接。用完之后还给连接池。这样不用开和关,来提高效率。

77、什么是DAO模式?
DATA映射到OBJECT

78、事务的ACID是指什么?
原子性,一致性,独立性,持久性

79、JDBC中如何进行事务处理?
try{setAutoCommit(false) sql,sql commit, setAutoCommit(true)}
catch exception{ rollback(),setAutoCommit(true)}

80、JDBC能否处理Blob和Clob?
可以

81、简述正则表达式及其用途。
用一个范式规则来匹配或查找字符串

82、Java中是如何支持正则表达式操作的?
String 里有MATCHES 和 replaceAll
Pattern &Matcher

83、获得一个类的类对象有哪些方式?
A.class, a.getClass(), Class.forName()

84、如何通过反射创建对象?
a.getClass().newInstance();

85、如何通过反射获取和设置对象私有字段的值?
getDeclaredField('private')
setAccessbile(true)
field.set(obj,xxx);

86、如何通过反射调用对象的方法?
Method m = class.getMethod("methodName");
m.invoke(obj,args);

87、简述一下面向对象的"六原则一法则"。
开闭原则,最少知道原则,里式替换,接口分离,合成聚合,单一职责,依赖倒转

88、简述一下你了解的设计模式。
适配器,工厂,模板,观察者,代理模式,责任链,单例。

89、用Java写一个单例类。

public class Single {
   INSTANCE;
   public Single getInstance(){
      return Single.INSTANCE;
    }
}

90、什么是UML?
统一建模语言

91、UML中有哪些常用的图?
时序图,USE CASE 图,类图

92、用Java写一个冒泡排序。

public static void main(String[] args) throws IOException {
       int[] A = {9,4,2,8,5,1,0,6,7};
       int l = A.length;
       for(int i = l-1; i >= 0; i--){
           for(int j = 0; j < i; j++){
               if(A[j]>A[j+1]) swap(A,j,j+1);
           }
       }
        System.out.println(Arrays.toString(A));
    }
    private static void swap(int[] A,int i,int j) {
        int tmp = A[i];
        A[i] = A[j];
        A[j] = tmp;
    }

93、用Java写一个折半查找。

int index = -1;
        int s = 0, e = l-1;
        while(s<=e){
            int mid = (e-s)/2+s;
            if(A[mid] < tar){
                s = mid+1;
            }else if(A[mid]>tar){
                e = mid-1;
            }else{
                index = mid;
                break;
            }
        }
        System.out.println(index);
    }

94、阐述Servlet和CGI的区别?
不会啦

95、Servlet接口中有哪些方法?
init(servletConfig),service(servletRequest,servletRespone),destory()
getServletConfig(),getServletInfo()

96、转发(forward)和重定向(redirect)的区别?
转发是由服务器去到另一个URL获得资源,而对CLIENT来说是不知道有这件事
REDIRECT,CLIENT可以发现URL被重定向到别的网址了。

97、JSP有哪些内置对象?作用分别是什么?
不会啦

98、get和post请求的区别?
get是请求资源,可缓存,幂等。
post 是 修改资源,不可缓存,不幂等。
POST发2次请求,GET发一次。

99、常用的Web服务器有哪些?
tomcat,redit,ngnix,iis,google server,nginx,apache,jboss

你可能感兴趣的:(java知识 快问快答)