面试小结

1、逻辑关系:&    &&    |    ||的区别

&和&&都是逻辑与的意思,区别在于&对于左右的表达式都需要进行判断,而&&只有左侧表达式为true时才对右侧的进行判断:

public class Tt
{
    
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        int a = 0, b = 0;
        
        if (1 == a & 1 == b++)
        {
            System.out.println("/");
        }
        System.out.println("b=" + b);
    }
}

以上的输出为:b=1,因为虽然1==a为false 但仍要继续判断1=b++;而改为&&则输出为b=0。


|和||为逻辑或,区别在于|对于左右都进行判断,而||只有左侧表达式为false时才进行右侧的判断

public class Tt
{
    
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        int a = 0, b = 0;
        
        if (0 == a | 1 == b++)
        {
            System.out.println("/");
        }
        System.out.println("b=" + b);
    }
}

输出结果:b=1,因为要全部进行判断;换为||则输出b=0


2、对cookie的操作

java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题。

 

建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下

1
2
3
4
HttpServletRequest request 
HttpServletResponse response
Cookie cookie = new  Cookie( "cookiename" , "cookievalue" );
response.addCookie(cookie);

 

下面建立一个有生命周期的cookie,可以设置他的生命周期

1
2
3
4
5
6
7
8
cookie = new  Cookie( "cookiename" , "cookievalue" );
 
cookie.setMaxAge( 3600 );
 
//设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问
 
cookie.setPath( "/" );
response.addCookie(cookie);

 

下面介绍如何读取cookie,读取cookie代码如下

1
2
3
4
5
Cookie[] cookies = request.getCookies(); //这样便可以获取一个cookie数组
for (Cookie cookie : cookies){
     cookie.getName(); // get the cookie name
     cookie.getValue(); // get the cookie value
}

 

上面就是基本的读写cookie的操作。我们在实际中最好进行一下封装,比如增加一个cookie,我们关注的是cookie的name,value,生命周期,所以进行封装一个函数,当然还要传入一个response对象,addCookie()代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
  * 设置cookie
  * @param response
  * @param name  cookie名字
  * @param value cookie值
  * @param maxAge cookie生命周期  以秒为单位
  */
public  static  void  addCookie(HttpServletResponse response,String name,String value, int  maxAge){
     Cookie cookie = new  Cookie(name,value);
     cookie.setPath( "/" );
     if (maxAge> 0 )  cookie.setMaxAge(maxAge);
     response.addCookie(cookie);
}

 

读取cookie的时候,为了方便我们的操作,我们希望封装一个函数,只要我们提供cookie的name,我们便可以获取cookie的value,带着这个想法,很容易想到将cookie封装到Map里面,于是进行下面的封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
  * 根据名字获取cookie
  * @param request
  * @param name cookie名字
  * @return
  */
public  static  Cookie getCookieByName(HttpServletRequest request,String name){
     Map<String,Cookie> cookieMap = ReadCookieMap(request);
     if (cookieMap.containsKey(name)){
         Cookie cookie = (Cookie)cookieMap.get(name);
         return  cookie;
     } else {
         return  null ;
     }  
}
 
 
 
/**
  * 将cookie封装到Map里面
  * @param request
  * @return
  */
private  static  Map<String,Cookie> ReadCookieMap(HttpServletRequest request){ 
     Map<String,Cookie> cookieMap = new  HashMap<String,Cookie>();
     Cookie[] cookies = request.getCookies();
     if ( null !=cookies){
         for (Cookie cookie : cookies){
             cookieMap.put(cookie.getName(), cookie);
         }
     }
     return  cookieMap;
}


4、对于Comparable接口的小结

 实现了Comparable接口的类在一个Collection(集合)里是可以排序的,而排序的规则是按照你实现的Comparable里的抽象方法compareTo(Object o) 方法来决定的。 compareTo方法在Object中并没有被声明,它是java.lang.Compareable接口中唯一的方法。一个类实现了Compareable接口,就表明它的实例具有内在的排序关系(natural ordering)。如果一个数组中的对象实现了Compareable接口,则对这个数组进行排序非常简单:Arrays.sort()方法就可以完成按照实现的compareTo方法的顺序完成排序

import java.util.Arrays;

public class SetTest
{
    public static void main(String[] args)
    {
        Student[] stu = new Student[3];
        stu[0] = new Student(100, "100a", "100");
        stu[1] = new Student(10, "10a", "10");
        stu[2] = new Student(1000, "1a", "1");


        Arrays.sort(stu);
        for (Student s : stu)
        {
            System.out.println("id=" + s.getId());
        }
    }
}

class Student implements Comparable<Student>
{
    private int id;
    
    private String name;
    
    private String passWord;
    
    public Student(int id, String name, String passWord)
    {
        this.id = id;
        this.name = name;
        this.passWord = passWord;
    }
    
    public int getId()
    {
        return id;
    }
    
    public void setId(int id)
    {
        this.id = id;
    }
    
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
    
    public String getPassWord()
    {
        return passWord;
    }
    
    public void setPassWord(String passWord)
    {
        this.passWord = passWord;
    }
    
    //实现排序方法
    public int compareTo(Student o)
    {
        if (this.id > o.id)
        {
            return -1;
        }
        else if (this.id < o.id)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}
输出结果:
id=1000
id=100
id=10



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值