博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几道面试题
阅读量:5230 次
发布时间:2019-06-14

本文共 2783 字,大约阅读时间需要 9 分钟。

1.System.out.println(4|7),问输出的结果?

 此题关键点在“|”符,以前只知道它代表“或者”的意思,没想到它的全称是“按位或”,即是按二进制位运算。

 所以此题的正解是:

  4的2进制值是 00000100

  7的2进制值是 00000111
  按位或运算后为 00000111 也就是 7

题目延伸:System.out.println(4&7) ,输出结果?

  &:位运算是对整数的进制位进行操作

  4的二进制:0100
  7的二进制:0111
  首先,二进制与运算规则:1&1=1 1&0=0 0&0=0
  然后我们列出表
  DCBA
  0100
  0111
  这样们得到
  A:0
  B:0
  C:1
  D:0
  最好得到:
  DCBA
  0100
  结果0100
  好明显就是:4了

2 一个char类型的变量可以保存一个汉字吗?

  以前对char类型占多少个字节这种问题,总是朦朦胧胧,看到这条面试题时,当时考虑,char类型只占一个字节,而一个汉字要占两个字节,所以保存不了。

  后来被面试官一顿乱喷,说这么基础的问题都不懂,实在难以理解。随后再网上找来答案,原来这道题还涉及到java的编码问题。

  java采用的是unicode编码方式,C采用的是ASCII编码方式。而ASCII和Unicode又有何种区别呢?

   ASCII就是编码英文的26个字母和一些常见的符号,之后扩展了一半。总之是一个字节来做编码,大于128的部分是一些特殊符号。但ASCII是无法编码别的东西的,比如说是不               存在“中文的ascii码需要2个字符”这种说法的。ASCII就只有一个字节。

   Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包括了。Unicode本身是只有2个字节的,之所以出现UTF-8,UTF-16等等之类,那是为     了针对不同的应用环境,提高整体编码效率,比如如果某篇文章里绝大部分是英语(单字节就能表示),就比较适合使用utf-8,而如果绝大部分是中文(需要双字节),可能  就utf-16比较合适了。

   最简单的说就是,unicode有每个编码的字符有本身就占两个字节,而ascii编码的字符本身只占一个字节;

   所以在java中一个char类型的字符占了两个字节,而一个汉字也刚好为两个字节,当然能够存放一个汉字了。(在C中不行,这也是为什么搞混的原因)

  测试一下:

  

public class Test {    public static void main(String[] args) {       String myName="My name is 于祥通";       char xiang='于'; //合法的       System.out.println("我的姓氏为:"+xiang); //输出:我的姓氏为:于       System.out.println(myName.substring(0, 1)); //输出:M       System.out.println(myName.substring(myName.length()-1, myName.length())); //输出:通    }}

  substring 处理的最小单元就是一个字符,也就是一个char类型,2个字节 。

3. 线程中sleep()方法和wait()的区别?

  1,这两个方法来自不同的类分别是Thread和Object 

  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 

  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用    synchronized(x){       x.notify()      //或者wait()    } 

  4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

4. 线程有多少种的启动方式?

 4.1.继承Thread

public class java_thread extends Thread{	public static void main(String args[])	{		(new java_thread()).run();		System.out.println("main thread run ");	}	public synchronized  void run()	{		System.out.println("sub thread run ");	}}

 4.2 实现Runnable接口

public class java_thread implements Runnable{	public static void main(String args[])	{		(new Thread(new java_thread())).start();		System.out.println("main thread run ");	}	public void run()	{		System.out.println("sub thread run ");	}}

 4.3直接在函数体使用

void java_thread(){     Thread t = new Thread(new Runnable(){            public void run(){            mSoundPoolMap.put(index, mSoundPool.load(filePath, index));            getThis().LoadMediaComplete();            }});		t.start();}

  4.4.比较:

  实现Runnable接口优势:

  1)适合多个相同的程序代码的线程去处理同一个资源

  2)可以避免java中的单继承的限制

  3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

  继承Thread类优势:

  1)可以将线程类抽象出来,当需要使用抽象工厂模式设计时。

  2)多线程同步

  在函数体使用优势

  1)无需继承thread或者实现Runnable,缩小作用域。

                                                                ----例子来自网上

 

转载于:https://www.cnblogs.com/asdzheng/archive/2013/06/02/3114074.html

你可能感兴趣的文章
【程序执行原理】
查看>>
第二次项目冲刺(Beta阶段)5.24
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
PHP 导出 Excell
查看>>
Java基础教程——网络基础知识
查看>>
自己到底要的是什么
查看>>
this 指向
查看>>
Kruskal基础最小生成树
查看>>
BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
[WebMatrix] 如何将SQL Compact 4.0 移转至SQL Server 2008 Express
查看>>
Java内部类详解
查看>>
python-基础
查看>>