无聊做别人的面试题

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线程最好,请你设计一个程序框架,使得计算时间最短(计算任务本身时间不变)

 

 

你可能感兴趣的:(面试题)