mysql 处理时间
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
数据库的三范式
那些数据库的书介绍的数据库范式,实在是晦涩难懂,我在这里给出一个通俗的描述:
1NF:一个table中的列是不可再分的(即列的原子性)
2NF:一个table中的行是可以唯一标示的,(即table中的行是不可以有重复的)
3NF:一个table中列不依赖以另一个table中的非主键的列,还是不通俗!巨寒!!
举个例子吧:有一个部门的table,我们叫它tbl_department, 它有这么几列(dept_id(pk),dept_name,dept_memo...) 有一个员工table,我们叫它tbl_employee,在这个table中有一列dept_id(fk)描述关于部门的信息,若tbl_employee要满足3NF,则在tbl_employee中就不得再有除dept_id列的其它有关部门信息的列!
一般数据库的设计满足3NF即可!(个人觉得应该尽可能的满足3NF,一家之言^_^)
BCNF:通常认为BCNF是修正的第三范式,它比3NF又进一步!
4NF:
5NF:将一个table尽可能的分割成小的块,以排除在table中所有冗余的数据
今天星期几?
import java.util.Calendar;
import java.util.Date;
public class CalendarTest {
public static void main(String[] args) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五","星期六" };
Calendar calendar = Calendar.getInstance();
Date date = new Date();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)-1;
if(dayOfWeek<0)dayOfWeek=0;
System.out.println(dayNames[dayOfWeek]);
}
}
runtime exception 和exception的区别
首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked Exception)。
一般而言,Checked Exception 表示这个Exception 必须要被处理,也就是说程序设计者应该已经知道可能会收到某个Exception(因为要try catch住) ,所以程序设计者应该能针对这些不同的Checked Exception 做出不同的处理。
而Runtime Exception 通常会暗示着程序上的错误,这种错误会导致程序设计者无法处理,而造成程序无法继续执行下去。
4.19面试
ACID
一个要有事务属性的数据库需要具有ACID的特性
ACID,指数据库的不可部分完成性(又称「原子性」,Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中,无法保证数据的正确性。
原子性就是比如我给我妈转账钱,我这里扣100,她那里加100,要是中间突然停电了两个人的账户上的钱都要回滚成转账以前的。
一致性就是我转给我妈100块,我帐户里要扣100,我妈帐户要加100,不能我这里扣50,我妈那里加100。
隔离性就是为了保证事务并发时候数据不出错。
持久性就是转账完成以后我这里就永久的扣了100而我妈那里就永久的加了100元不会再变了。
为了保证事务的隔离性数据库会采用锁机制
锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。
在SQL Server中,可以对以下的对象进行锁定:
数据行(Row):数据页中的单行数据;
索引行(Key):索引页中的单行数据,即索引的键值;
页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB; 盘区(Extent):一个盘区由8 个连续的页组成;
表(Table);
数据库(Database)。
从数据库系统的角度来看锁分为以下三种类型:
独占锁(Exclusive Lock)
独占锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受。执行数据更新命令,即INSERT、 UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。独占锁一直到事务结束才能被释放。
共享锁(Shared Lock)
共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它。在SELECT 命令执行时,SQL Server 通常会对对象进行共享锁锁定。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。
更新锁(Update Lock)
更新锁是为了防止死锁而设立的。当SQL Server 准备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL Server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象上有其它锁存在时,无法对其作更新锁锁定。
从程序员的角度看锁分为以下两种类型:
乐观锁(Optimistic Lock)
乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。 参考资料:spring里面事务的传播属性和事务隔离级别(复习)里面的事务的隔离级别
悲观锁(Pessimistic Lock)
悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。
一个字符串子集 如ABC 它的子集有多少个 字母要连续
AB
一个:A\B
两个:AB
ABC
一个:A\B\C
两个:AB\BC
三个:ABC
ABCD
一个:A\B\C\D
两个:AB\BC\CD
三个:ABC\BCD
四个:ABCD
N个字母
n(n-1)*1/2
一个字符串子集 如ABC 它的子集有多少个 字母可以不连续
2的N次方-1
4.11面试
不准用Integer.valueOf 不准用相类似java api
写一个函数实现字符串转换成整型
package com;
/*面试题1:
不准用Integer.valueOf 写一个函数实现字符串转换成整型*/
public class Test1 {
public static int toInt(String numstr){
int result = 0;
int sign = 1;
for(int i = 0; i < numstr.length(); i++)
{
//charAt 返回字符串该位置上字符的acsii码值
int ch = numstr.charAt(i);
if(i==0 && ch == '-'){
sign = -1;
}else if(i==0 && ch == '+'){
sign = 1;
}else{
//'0'的acsii码是48
result = result*10 + (ch-'0');
}
}
return sign * result;
}
public static void main(String[] args) {
String numstr = "123";
System.out.println(toInt(numstr));
}
}
StringBuffer 和 StringBuilder的区别
StringBuffer线程安全
StringBuilder非线程安全
效率 StringBuilder > StringBuffer > String
题目转自 http://263796001-qq-com.iteye.com/blog/1453041
都是2012金山在武昌招聘时的笔试题。
第一个是正式招聘的题目:
1:String、StringBuild、StringBuffer的区别
String是不可变类 final的 StringBuffer是个可变的类 性能比String好
2:想让基类不被子类继承,用什么方法
final
3:Java为什么可以在不同平台上运行?(Java的跨平台性)
jvm
4:给定一个数组,求第二大数
先冒泡排序 再输出第二个数 性能好像搓了点 package cn.algorithm;
public class NumberTwo {
public static void main(String[] args) {
int[] a = {9,1,3,4,5,6,2,4,7,8};
int[] b = a.clone();
NumberTwo.bubblesort(b);
System.out.println(b[1]);
System.out.println(a[1]);
}
public static void bubblesort(int[] number){
int temp = 0 ;
for(int i = 0; i < number.length - 1; i++){
for(int j = i + 1; j < number.length; j++) {
if(number[i] < number[j]){
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
}
}
}
5:用递归和非递归实现Fib(K,n)函数,Fib(K,n)定义略,记不太清楚了
package cn.algorithm;
public class Fibonacci {
public static void main(String[] args) {
Fibonacci.fibonacci2(3);
}
//递归
public static int fibonacci(int n){
if(n < 2){
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
//非递归
public static void fibonacci2(int n){
int[] i = new int[100];
i[0] = 1;
i[1] = 1;
for(int j = 2; j < n; j ++){
i[j] = i[j-1] + i[j-2];
}
for(int k = 0; k < n; k++)
System.out.println(i[k]);
}
}
6:设计(实现?)一个日志类框架。原题比较长,大致这个意思
不会唉。以后回来看
第二个是后来单独出的对实习生的笔试,本来是没有的,后来单独出的貌似
1:求2个大整数之和
java.math.BigInteger
BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("1234567890");
System.out.println(a.add(b));
2.1:二叉树排序
2.2:将排好序的二叉树转为双向链表输出
3:给定一个字符串,输出第一个只出现一次的字符
public class s17 {
public static char firstOne(String s)
{
char result = '0';
char temp;
int[] num = new int[52];
for (int i = 0; i < s.length(); i ++)
{
temp = s.charAt(i);
if ( temp >= 'a' && temp <= 'z' )
{
num[temp - 'a']++;
}
else
if (temp >= 'A' && temp <= 'Z')
{
num[temp - 'A' + 26] ++;
}
}
for (int i = 0; i < num.length; i ++)
{
if (num[i] == 1)
{
if (i >= 0 && i <=26)
{
result = (char)(i + 'a');
}
else
result = (char)(i - 26 + 'A');
break;
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// String s = "xabb";
String s = "abaccdeff";
//
char c = firstOne(s);
System.out.println(c);
}
}
4:给定一个文本文件,其中有10亿个IP,输出出现频率最高的1000IP
5:记不太清楚了,貌似是有1000多个计算任务,对于一个4CPU的机器,明显实现4线程最好,请你设计一个程序框架,使得计算时间最短(计算任务本身时间不变)