zoukankan      html  css  js  c++  java
  • 面试题整理(答案从网上找到后整理的)

    1、 java中如何把String型转化成double型的

    String s = "123.345";
    double num = Double.parseDouble(s);

    当string里的数字比较大时:

    例如:
    字符串“1467000000”通过Double.parseDouble以后转化为double类型,然后我用它除以100000000。结果得到的值变成14.669999999999998。再转化成字符串与“14.67”比较,结果是不相等。

    精 度的问题!用基本类型的double类型进行运算可能会丢失精度。而且特别大的数又没法处理。所以如果用BigDecimal这个类问题就解决了。这个类 在java.Math包下。它可以处理任意精度的数据。对于楼主出现的问题,我从新写了段代码,供楼主参考。但是主要是还得查看API!代码如下:

    import java.math.*;

    public class oopp

    {

     public static void main(String[] args)

     {

      String a="1467000000";

      double aa=Double.parseDouble(a);

      BigDecimal beichushu=new BigDecimal(aa);

      BigDecimal chushu=new BigDecimal(100000000);

      BigDecimal result=beichushu.divide(chushu,new MathContext(4));//MathConText(4)表示结果精确4位!

      boolean isTrue=String.valueOf(result).equals("14.67");

      System.out.println("1467000000除以100000000="+result);

      System.out.println(result+"与14.67比较的结果是"+isTrue);

     }

    }

    2、 Java double转String  

    把 一个double类型的值转成string,网上有很多的方法,包括用String.valueOf(Double d),或者 String str = "" + d, 或者用DecimalFormat df = new DecimalFormat("#.00"), 以及用NumberFormat类等。但是,当double的值特别大的时候,这些方法都是没有用的,因为double类型被转化成科学计数法了,对于小 数点后面的值就没有保存。后来发现用BigDecimal bd = new BigDecimal(d),然后调用bd.setScale(arg0, arg1)这个方法特别有效。

    3、 JNDI是java访问名字和目录服务的接口 

    4、 写出sql查询数据库中的第5-10条记录

    sql server 方案1:

    select top 6 * 
    from Table 
    where table_Id not in (select top 4 tableId from Table)

    ===============================

    通用公式:查询sql server数据库中的第m到n条记录

    select top (n-m+1) *  from t where id in (select top (m-1) id from t order by id) order

    by id desc

    ================================

    查询Sql Server数据库中后10条记录

    SELECT TOP 10 FROM 表名 ORDER BY 排序列 DESC

     

    mysql 方案:

    select * from t order by id limit 5,6

    ==============================

    select * from t order by id limit m,(n-m+1)

    mysql 中limit的用法:

    select * from table limit m,n
    其中m是指记录开始的index,从0开始,表示第一条记录
    n是指从第m+1条开始,取n条。

    ===============================

    查询Mysql数据库中后10条记录

    select * from t order by id  desc limit 10

     

    oracle 方案:

    select * from (select  rownum r,* where r<=10) where r > 4

    ===========================================

    select * from (select rownum r,* from t where r<=n)  where r>m-1

    ===========================================

    查询Oracle数据库中后10条记录

    select * from t where rownum <=10 order by id desc

    其中rownum为oracle的关键字

    5、 写出学生信息的xml文件

    写一个XML文件,文件里的内容有姓名,年龄,注册时间(要Date格式的),大概写三四个成员就可以了

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <studetns>
        <student>
          <name>saa</name>
          <age>14</age>
          <CreateDate>2010-11-11</CreateDate>
        </student>
        <student>
          <name>sa</name>
          <age>14</age>
          <CreateDate>2010-11-11</CreateDate>
        </student>
        <student>
          <name>saaa</name>
          <age>14</age>
          <CreateDate>2010-11-11</CreateDate>
        </student>
      </studetns>
    </root>

    6、 查询班级中的男生人数,女生人数

    学生表(所在班级,性别)
    现要得出一张表,(班级,男数,女数)

    select 所在班级,男生人数=sum(case when 性别=

    '男' then 1 else 0 end),
        女生人数=sum(case when 性别='女' then 1 else 0 end) 
    from 学生表
    group by 所在班级

    7、 tcp和udp的区别

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。

    UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
      UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

    tcp协议和udp协议的差别
    TCP UDP
    是否连接 面向连接 面向非连接
    传输可靠性 可靠 不可靠
    应用场合 传输大量数据 少量数据
    速度 慢 快

    TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
    UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它 们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

    8、 linux下进程间通信(IPC)的几种主要手段简介:

    1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
    2. 信 号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了 支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了 实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
    3. 报文(Message)队列(消息队 列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
    4. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
    5. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
    6. 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

    9、 程序 进程 线程的区别

    进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 

    简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 

    线程的划分尺度小于进程,使得多线程程序的并发性高。 

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 

    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 

    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 

    10、    JDBC 连接Mysql

     Class.forName(“com.mysql.jdbc.Driver”)

     Connection connectMySQL  =  DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );

    Statement statamentMySQL =connectMySQL.createStatement();

     statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ; 

    ResultSet resultSel = statement.executeQuery( "select * from staff" );

    11、    数据库三范式是什么

    第一范式(1NF):字段具有原子性,不可再分。

    第二范式就是非主属性非部分依赖于主关键字

    第三范式(3NF)要求一个

    数据库表中不包含已在其它表中已包含的非主关键字信息。

    所以第三范式具有如下特征:

    1,每一列只有一个值

    2,每一行都能区分。

    3,每一个表都不包含其他表已经包含的非主关键字信息。

    12、      SAX与DOM解析XML的区别

    解析xml有四种方法:DOM,SAX,DOM4j,JDOM.
       我们主要学了两种:DOM和SAX.
         DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件。各有各的好。

    SAX是基于事件流的解析,DOM是基于XML文档树结构的解析
         DOM和SAX的不同:
         1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。从而消耗很大的内存空间。而SAX是基于事件的。当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间。
         2. DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能对XML进行读取,而不能在文件中插入数据。这也是SAX的一个缺点。
         3.SAX的另一个缺点:DOM我们可以指定要访问的元素进行随机访问,而SAX则不行。SAX是从文档开始执行遍历的。并且只能遍历一次。也就是说我们不能随机的访问XML文件,只能从头到尾的将XML文件遍历一次(当然也可以中间截断遍历)。

    Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。

    13、    多线程

     Java线程的创建和启动:
    可以有两种方式创建新的线程:
    第一种:
    1.定义线程类实现Runnable接口
    2.Thread myThread = new Thread(target);   //target为Runnable接口类型
    3.Runnable中只有一个方法:public void run();用以定义线程运行体
    4.使用Runnable接口可以为多个线程提供共享的数据
    5.在实现Runnable接口的类的run()方法定义中可以使用Thread的静态方法public static Thread currentThread();获取当前线程的引用

    第二种:
    1.可以定义一个Thread的子类并重写其run方法如:
    class MyThread extends Thread {   
    public void run() {...}
    }   
    2.然后生成该类的对象:
    MyThread myThread = new MyThread();

    14、    Java是Unicode编码,unicode码是2个字节

    15、    非常有用的Java程序片段

    http://developer.51cto.com/art/201306/398347_1.htm

    16、    在Hashtable上下文中同步是什么意思?

    同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

    17、    HashMap不是同步的,而Hashtable是同步的。

    18、    Hibernate中load()和get()的区别:

    load加载方法:

    Java代码

    Users user = (Users)session.load(Users.class, userId);    

    Users user = (Users)session.load(Users.class, userId);

    这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。

    get加载方法:

    Java代码

    Users user = (Users)session.get(Users.class, userId);  

    Users user = (Users)session.get(Users.class, userId);

    则立即去执行数据库查询。 所以Users user = (Users)session.load(Users.class, userId);不会执行任何sql。

    两加载方法区别:

    区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如 果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异 常:org.hibernate.ObjectNotFoundException;

    区别2:load支持延迟加载,get不支持延迟加载。

    19、    Struts 2框架组成

    本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

    核心控制器 FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

    业务控制器Action和业务逻辑组件是需要用户来自己实现的。

    用户在开发Action和业务逻辑组 件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

     Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

    20、    Struts2基本简要流程如下:

    1、  客户端浏览器发出HTTP请求。

    2、根据web.xml配置,该请求被 FilterDispatcher接收。

    3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。

    4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

    5、Action执行完毕,根据 struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。

    21、Ajax的优点 
        Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点: 
    1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。 
    2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。 
    3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
    4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

     

     

  • 相关阅读:
    Tapestry5 Setup with HTML5 and jQuery
    CSS学习六:布局剖析
    CSS学习三:表格,表单,超链接和鼠标等。
    CSS+DIV实战
    一到关于c++继承和多态的题
    一道有关指针的题
    小程序,嘿嘿
    《犯罪心理》名言部分
    ethereal与wincap
    并发编程之:Lock
  • 原文地址:https://www.cnblogs.com/sophine/p/3083921.html
Copyright © 2011-2022 走看看