java面试(八)--(1)Request对象的主要方法(2)Java领域中的Web Service框架(3)垃圾回收机制(4)互斥锁(5)字符串转换

1.请详细说明一下Request对象的主要方法是什么?

Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request 的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
getCharacterEncoding() :返回请求中的字符编码方式
getContentLength() :返回请求的 Body的长度
getHeader(String name) :获得HTTP协议定义的文件头信息
getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例
getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

补充:
HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。

doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法.

2.请简单介绍一下你了解的Java领域中的Web Service框架都有哪些?

  1. JWS是Java语言对WebService服务的一种实现,用来开发和发布服务.而从服务本身的角度来看JWS服务时没有语言界限的,是Java语言为Java开发者提供便捷发布和调用webService服务的一种途径.
  2. Axis2是Apache下一个轻量级WebService框架.是WebService框架的集大成者,它不但能制作和发布WebService,而且可以生产Java和其它语言版WebService客户端和服务端代码.
  3. XFire是一个高性能的WebService框架, 优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便. 但是对Java之外的语言,没有提供相关的代码工具.
  4. CXF是Apache旗下一个重磅的SOA简易框架, 它实现了ESB(企业服务总线). CXF来自于XFire项目,经过改造后形成的,就像Struts2来自WebWork一样.
    注:对于Axis2与CXF之间的关系,一个是Axis2出现的时间较早,而CXF的追赶速度快.

如何抉择:
1、如果应用程序需要多语言的支持,Axis2 应当是首选了;

2、如果应用程序是遵循 Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;

3、如果应用程序没有新的特性需要的话,就仍是用原来项目所用的框架,比如 Axis1,XFire,Celtrix或 BEA 等等厂家自己的 Web Services 实现.

3. 谈谈java的垃圾回收机制

java的垃圾收集机制主要针对新生代和老年代的内存进行回收,不同的垃圾收集算法针对不同的区域。所以java的垃圾收集算法使用的是分代回收。一般java的对象首先进入新生代的Eden区域,当进行GC的时候会回收新生代的区域,新生代一般采用复制收集算法,将活着的对象复制到survivor区域中,如果survivor区域装在不下,就查看老年代是否有足够的空间装下新生代中的对象,如果能装下就装下,否则老年代就执行FULL GC回收自己,老年代还是装不下,就会抛出OUtOfMemory的异常.

4.什么是互斥锁,请简单谈谈

采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。

5.字符串转换

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0.
示例代码:

public class TestStrToInt {
    public int StrToInt(String str){
	
    }
}

实现代码:

public class TestStrToInt {
    public int StrToInt(String str){
        //将字符串转换为字符数组
        char[] c = str.toCharArray();
        //数值为0返回0
        if(c.length==1&&(c[0]-'0')==0) return 0;
        long num=0;//最终结果
        int temp=1;//每轮扩大10倍
        for(int i=c.length-1;i>=0;i--){
            if(c[i]-'0'>=0&&c[i]-'0'<=9){
                if(i!=c.length-1){
                    temp=temp*10;//每轮扩大10倍
                    long tempNum=0;
                    tempNum=temp*(c[i]-'0');//获取每轮的值
                    num+=tempNum;
                }
                if(i==c.length-1) num+=c[i]-'0';
            }else{
                return 0;//有非数字存在
            }
        }
        //判断最终结果是否越界
        if(num<=Integer.MAX_VALUE){
            return (int) num;
        }else{
            return 0;//越界,返回0
        }
    }
    public static void main(String[] args) {
        TestStrToInt test=new TestStrToInt();
        String str="21474a3647";
        int index = test.StrToInt(str);
        System.out.println(index);//0
        System.out.println(Integer.MAX_VALUE);//2147483647
        System.out.println(Integer.MIN_VALUE);//-2147483648
    }
}

小编在验证边界问题的时候,感觉没有判断有符号的情况,读者可以试试有符号数字符串时该如何实现.
下一期开始,小编除了每日的面试题总结外,会进行阿里等大厂的面试题总结了,大家有兴趣的话可以持续关注小编的更新.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值