面试题积累

如果是能简单搜索到的问题,那列出来也没必要。慢慢积累。

1. 如何判断一个数是2的幂。

个人认为,数字转化为二进制,符号位为0,余下部分有且只有最左边一位是1,其余位都是0,才是2的幂。 原理是 乘二则向左进一位。

2. 陷阱面试题:

在Java中,Throwable是一个接口还是抽象类?

3. Javascript 题目

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.  <head>  
  4.   <title>下面的代码输出什么,如何修正</title>  
  5.   <script>  
  6.     var myname = "xiaoming";  
  7.     if(!!myage){  
  8.         myname = "xiaozhang";  
  9.     }  
  10.     alert("myname="+myname);  
  11.   </script>  
  12.  </head>  
  13.  <body>  
  14.  </body>  
  15. </html>  

4. 二进制算法以及思维陷阱题

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 现有一千瓶药水,其中九百九十九瓶是完全一样的,   
  2. 只有一瓶里面是毒药,但是外观上分辨不出来。   
  3. 毒药如果给小白鼠喝一点,一星期后这只小白鼠会突然死亡,   
  4. 但之前一点症状也没有。   
  5. 现需要在一星期内找出哪瓶是毒药,问至少需要几只小白鼠?   
5. Java数据范围

在Java中, 有一个数字,比如100亿,可以使用 int 来存储吗?
100亿 * 100亿呢,可以用什么类型来存储?

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 这样计算, int 类型是32位,4个字节,2的10次方是 1024,大约是1K,2^20 = 1M,约100万, 2^30= 1G,大约是10亿,所以整数只能存大约40亿个数字,正数22E个,所以 100亿可以使用long来存储,但不能使用 int 来存储。  
  2. long 是64位,因为 32位存放不下100亿,所以64位也存放不下 100亿 * 100亿,只能使用特殊的类型啦,比如K神所说的 BigInteger,或者 BigDecimal来存放。  

一个测试程序:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class TestIntLong {  
  2.     /** 
  3.      * 请参考 int 存放100亿, long 存放100亿*100亿的情况 
  4.      */  
  5.     public static void main(String[] args) {  
  6.         int num1 = 10 * 1000 * 1000 * 1000;  
  7.         long num2 = 10L * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000;  
  8.         long num3 = 10 * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000L;  
  9.         long num4 = 10L * 1000L * 1000L * 1000L * 10L * 1000L * 1000L * 1000L;  
  10.         //  
  11.         System.out.println("num1="+ num1);//num1=1410065408  
  12.         System.out.println("num2="+ num2);//num2=7766279631452241920  
  13.         System.out.println("num3="+ num3);//num3=1569325056000  
  14.         System.out.println("num4="+ num4);//num4=7766279631452241920  
  15.     }  
  16. }  

6. Java面试题: 如何在一个 interface 中 执行一些操作

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.test.test.java;  
  2. /** 
  3.  * Java面试题: 如何在一个 interface 中 执行一些代码? 
  4.  */  
  5. public interface TestInvocation {  
  6.     public static final Runnable RUNNABLE   
  7.         = new Runnable() {  
  8.         @Override  
  9.         public void run() {  
  10.             System.out.println(  
  11.                 "类似这样,利用类加载机制,当然,也可以是其他类的类型."  
  12.             );  
  13.         }  
  14.     };   
  15. }  

另外,Java 8里面添加了默认方法,专门拿来干这种需求的.

7.  MySQL中UUID做主键如何变得有序呢?

[sql]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. select concat( date_format(current_timestamp'%Y%m%d%H%i%s'),'-', UUID() );  
返回的结果如下所示:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mysql> select concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() );  
  2. +----------------------------------------------------------------------+  
  3. | concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() ) |  
  4. +----------------------------------------------------------------------+  
  5. | 20140705202902-f280257a-043f-11e4-989a-00163e0202ca                  |  
  6. +----------------------------------------------------------------------+  
  7. 1 row in set (0.00 sec)  

8.为什么JSON定义的标准中,属性名需要用引号引起来呢,像下面的name一样?

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {"name""csdn""age": 11}  


9. 关于JVM

有个万(wu)能(lai) 的面试技巧,你可以问求职者,这个背后的思想是什么,你理解他的原理吗,为什么要这样实现,如果让你自己写,多长时间做一个基础版本出来?

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. GC 有哪几种,  
  2. 每个JDK版本中有什么区别,  
  3. 哪几种算法比较好,  
  4. 适合什么情况,  
  5. 其回收的思想是什么,  
  6. 怎么实现的,  
  7. 优缺点是什么、  
  8. 你要如何调优。。。  


10.面试题: Java 中,  下面的这种用法有什么问题?

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Date nextMonth = new Date(new Date().getTime() + 30*24*60*60*1000);  

当然,这种用法是很不好的,加一个月应该使用的是 Calendar 类,Calendar是Java的标准工具类,在 java.util 包下面.

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Date today = new Date();  
  2. Calendar cal = Calendar.getInstance();  
  3. cal.setTime(today);  
  4. cal.add(Calendar.MONTH, 1); // 加一个月  
  5. cal.add(Calendar.DATE, -1); // 减一天  
  6. //  
  7. Date nextM = cal.getTime();  
  8. System.out.println(nextM);  

更坑的在这里:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. long n = 30*24*60*60*1000;  
  2. long nl = 30*24*60*60*1000L;  
  3. System.out.println("n="+n);  
  4. System.out.println("nl="+nl);  
可以参考下面的输出结果: 

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. n=-1702967296  
  2. nl=2592000000  


提示: int 值可以放下多大的值?


11. 关于List的instanceof ,请说出123

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. /** 
  4.  *  下面的代码执行(输出)结果是什么? 
  5.  */  
  6. public class TestInstanceOf {  
  7.     public static void main(String[] args) {  
  8.           
  9.         List<String> listS = new ArrayList<String>();  
  10.         List<TestInstanceOf> listI = new ArrayList<TestInstanceOf>();  
  11.         // 下面的代码执行(输出)结果是什么?  
  12.         if (listS instanceof List<TestInstanceOf>) {  
  13.             System.out.println("listS instanceof List<TestInstanceOf>="+true);  
  14.         } else {  
  15.             System.out.println("listS instanceof List<TestInstanceOf>="+false);  
  16.         }  
  17.     }  
  18. }  


12.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值