本文共 4909 字,大约阅读时间需要 16 分钟。
上一篇文章位于这里:
因为太旧所以CSDN不让更新.其中 1-11 题是旧题目。
个人认为,数字转化为二进制,符号位为0,余下部分有且只有最左边一位是1,其余位都是0,才是2的幂。 原理是 乘二则向左进一位。
在Java中,Throwable是一个接口还是抽象类?
下面的代码输出什么,如何修正
现有一千瓶药水,其中九百九十九瓶是完全一样的,
只有一瓶里面是毒药,但是外观上分辨不出来。 毒药如果给小白鼠喝一点,一星期后这只小白鼠会突然死亡, 但之前一点症状也没有。 现需要在一星期内找出哪瓶是毒药,问至少需要几只小白鼠?
在Java中, 有一个数字,比如100亿,可以使用 int 来存储吗?
100亿 * 100亿呢,可以用什么类型来存储?
这样计算, int 类型是32位,4个字节,2的10次方是 1024,大约是1K,2^20 = 1M,约100万, 2^30= 1G,大约是10亿,所以整数只能存大约40亿个数字,正数22E个,所以 100亿可以使用long来存储,但不能使用 int 来存储。
long 是64位,因为 32位存放不下100亿,所以64位也存放不下 100亿 * 100亿,只能使用特殊的类型啦,比如K神所说的 BigInteger,或者 BigDecimal来存放。
一个测试程序:
public class TestIntLong { /** * 请参考 int 存放100亿, long 存放100亿*100亿的情况 */ public static void main(String[] args) { int num1 = 10 * 1000 * 1000 * 1000; long num2 = 10L * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000; long num3 = 10 * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000L; long num4 = 10L * 1000L * 1000L * 1000L * 10L * 1000L * 1000L * 1000L; // System.out.println("num1="+ num1);//num1=1410065408 System.out.println("num2="+ num2);//num2=7766279631452241920 System.out.println("num3="+ num3);//num3=1569325056000 System.out.println("num4="+ num4);//num4=7766279631452241920 } }
package com.test.test.java; /** * Java面试题: 如何在一个 interface 中 执行一些代码? */ public interface TestInvocation { public static final Runnable RUNNABLE = new Runnable() { @Override public void run() { System.out.println( "类似这样,利用类加载机制,当然,也可以是其他类的类型." ); } }; }
另外,Java 8里面添加了默认方法,专门拿来干这种需求的.
select concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() );
返回的结果如下所示:
mysql> select concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() ); +----------------------------------------------------------------------+ | concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() ) | +----------------------------------------------------------------------+ | 20140705202902-f280257a-043f-11e4-989a-00163e0202ca | +----------------------------------------------------------------------+ 1 row in set (0.00 sec)
应该考虑到各种系统,各种关键字以及标识符的组成不同,而且会有Map等情况
有个万(wu)能(lai) 的面试技巧,你可以问求职者,这个背后的思想是什么,你理解他的原理吗,为什么要这样实现,如果让你自己写,多长时间做一个基础版本出来?
GC 有哪几种, 每个JDK版本中有什么区别, 哪几种算法比较好, 适合什么情况, 其回收的思想是什么, 怎么实现的, 优缺点是什么、 你要如何调优。。。
Date nextMonth = new Date(new Date().getTime() + 30*24*60*60*1000);
当然,这种用法是很不好的,加一个月应该使用的是 Calendar 类,Calendar是Java的标准工具类,在 java.util 包下面.
Date today = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(today); cal.add(Calendar.MONTH, 1); // 加一个月 cal.add(Calendar.DATE, -1); // 减一天 // Date nextM = cal.getTime(); System.out.println(nextM);
更坑的在这里:
long n = 30*24*60*60*1000; long nl = 30*24*60*60*1000L; System.out.println("n="+n); System.out.println("nl="+nl);
可以参考下面的输出结果:
n=-1702967296 nl=2592000000
提示: int 值可以放下多大的值?
import java.util.ArrayList; import java.util.List; /** * 下面的代码执行(输出)结果是什么? */ public class TestInstanceOf { public static void main(String[] args) { ListlistS = new ArrayList (); List listI = new ArrayList (); // 下面的代码执行(输出)结果是什么? if (listS instanceof List ) { System.out.println("listS instanceof List ="+true); } else { System.out.println("listS instanceof List ="+false); } } }
> 容器,工厂,消除直接依赖,多个启动阶段,core,context包的作用等。
> 代理,反射机制,cglib...
> 4个,默认是可重复读
> connect by prior , 大数据量可能会卡死
> 假设100万条数据,开启事务,读取到50万条了,现在另一个连接删除了后50万条,并提交。>> 问: 第一个客户端还能继续读取到后面的数据吗? 如何实现的> redo,undo日志,为第一个连接进行模拟恢复
> 两种格式: 基于语句,基于行
> 应用层,传输层
> redis, 缓存,分布式序列> mongo, 小文件,图片,对象> hbase, 写多读少,放日志,或者存储大字段数据
> 数据库数据有变更时,通知缓存失效. 类似会话数据之类的,增加时就设置过期时间>> 后台有线程定期进行清理. 每次查询时也进行判断. 底层将 key 与 过期时间(戳)放在一起。
> /etc/profile.d/
> RPC, 注册中心,容灾机制
> hash, bucket/数组,链表
> 每个bucket就是一个锁
> 说原理不行,必须手写
> 异步任务,分类,submit() 与 excutive() 的区别: 有无返回值
2016年3月29日更新
转载地址:http://utsnl.baihongyu.com/