一面一得

一面一得,去面试不能白白去,得有收获。

今天(2017年3月29号)下午在格瓦拉生活网面试。

 

笔试题:

1.StringBuilder  StringBuffer  String的区别?string 为什么是不可变的?

答:1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
  2.String <(StringBuffer,StringBuilder)的原因
    String:字符串常量
    StringBuffer:字符创变量
    StringBuilder:字符创变量
    从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
    1 String s = "abcd";
    2 s = s+1;
    3 System.out.print(s);// result : abcd1

          http://www.codeceo.com/article/why-java-string-immutable.html

2.排序算法

http://www.cnblogs.com/0201zcr/p/4764427.html

/**
     * 选择排序算法
     * 在未排序序列中找到最小元素,存放到排序序列的起始位置  
     * 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。 
     * 以此类推,直到所有元素均排序完毕。 
     * @param numbers
     */
    public static void selectSort(int[] numbers)
    {
    int size = numbers.length; //数组长度
    int temp = 0 ; //中间变量
    
    for(int i = 0 ; i < size ; i++)
    {
        int k = i;   //待确定的位置
        //选择出应该在第i个位置的数
        for(int j = size -1 ; j > i ; j--)
        {
        if(numbers[j] < numbers[k])
        {
            k = j;
        }
        }
        //交换两个数
        temp = numbers[i];
        numbers[i] = numbers[k];
        numbers[k] = temp;
    }
    }

3.单例模式

http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html

** 
 * 方法一
 * 单例模式的实现:饿汉式,线程安全 但效率比较低 
 */  
public class SingletonTest {  
// 定义一个私有的构造方法 private SingletonTest() { }
// 将自身的实例对象设置为一个属性,并加上Static和final修饰符 private static final SingletonTest instance = new SingletonTest();
// 静态方法返回该类的实例 public static SingletonTest getInstancei() { return instance; } }

4.智力题(小明一家过桥)
现在小明一家过一座桥,过桥时候是黑夜,所以必须有灯.现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒.每次过桥只能过2人,两人过桥的速度以最慢者为定.还有过桥后要已过桥的其中一人送灯也算秒速,而灯在30秒后就会熄灭,过桥时不能没有灯.问小明一家怎样过桥?
答:答案三种:
1.第一步,小明与弟弟过桥,小明回来,耗时4秒;第二步,小明与爸爸过河,弟弟回来,耗时9秒;第三步,妈妈与爷爷过河,小明回来,耗时13秒;最后,小明与弟弟过河,耗时4秒,总共耗时30秒 
2.小明和弟弟过桥(3秒) + 小明回来(1秒)+ 爷爷和妈妈过桥(12秒) + 弟弟回来(3秒)+ 爸爸和小明过桥(6秒) + 小明回来(1秒) + 小明和弟弟过桥(3秒)= 29秒 
3.小明和弟弟过桥(3秒) + 弟弟回来(3秒)+ 爷爷和妈妈过桥(12秒) + 小明回来(1秒)+ 爸爸和小明过桥(6秒) + 小明回来(1秒) + 小明和弟弟过桥(3秒)= 29秒
(我算成 32秒 )

5.你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时都付费,如果只许你两次把金条弄断,你如何给你的工人付费?
答:分成比例1:2:4的三段,因为两次弄断就是三段,第一天你给1,第二天你给2,找回你1,你自己就有1和4,第三天再给1,自己剩下4,第四天给4,然后叫他把1.2找给你,第五天给1,第六天给2叫他1找给你,第七天把最后1给他.


6.10个箱子,每个箱子里有10个苹果.其中有一个箱子里的苹果每个是9两.其余每箱里的苹果都是10两.但是,只有一个称,只能称一次.怎样一下子称出那箱每个是9两的苹果?
答:第一箱苹果拿一个,第二箱拿两个,如此类推,第十箱十个.
一称,少一两就是第一箱,同理少多少量就是多少箱
(我答成分3次称)

7.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1

/**

* 设计 4 个 ( 可以是 n 个 ) 线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1

*/

 

package com.jiaocaigen.test;

 

public class Test {

 

// 采用 Runnable 接口方式创建的多条线程可以共享实例属性

private int i ;

 

// 同步增加方法

private synchronized void inc(){

i ++;

System. out .println(Thread.currentThread().getName()+ "--inc--" + i );

}

 

// 同步减算方法

private synchronized void dec(){

i --;

System. out .println(Thread.currentThread().getName()+ "--dec--" + i );

}

 

// 增加线程

class Inc implements Runnable {

public void run() {

inc();

}

}

 

// 减算线程

class Dec implements Runnable{

public void run() {

dec();

}

}

 

public static void main(String[] args) {

 

Test t = new Test();

 

// 内部类的实例化

Inc inc = t. new Inc();

Dec dec = t. new Dec();

 

// 创建 2*n 个线程 此处 n=2

for ( int i = 0; i < 2; i++) {

new Thread(inc).start();

new Thread(dec).start();

}

}

}

8.session和cookie的区别和联系

cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

cookie 和session 的联系:
session是通过cookie来工作的
session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。

9.

 

 

posted on 2017-03-29 17:42  伪全栈的java工程师  阅读(292)  评论(0编辑  收藏  举报