注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韬光养晦

路漫漫其修远兮,吾将上下而求索

 
 
 

日志

 
 

JAVA Linux笔试+面试  

2009-05-20 22:49:41|  分类: MSE learning |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天笔试和面试JAVA+UNIX方向。结果遇到很多问题不会,一些细节不是很清楚。摘抄下来。

JAVA疑惑点:
1 JAVA中每个字符几个字节?
    JAVA采用Unicode编码,每个字符占两个字节。参考见这里。

2 JAVA的原始数据类型有哪些?
    主要有void,boolean,char,byte,short,int,long,float,double等。 参考见这里。

3 HashMap 和 HashTable哪个是线程安全的?
    HashMap不是线程安全的,而HashTable是线程安全的。另外就是HashMap允许null作为key和value,而HashTable则都不允许。参考见这里。

4 JAVA中的数组是什么类型的?是对象吗?能动态改变大小吗?创建方法有哪些?char a[ ][ ], char a[ ] ,char [ ]a哪个不对?
    JAVA中的数组是对象,可以调用它的getClass方法,大小不能动态改变。数组有很多奇特的特性。参考A  参考B

5 满足那些条件我们才说是线程安全的?两个线程分别执行i=1和i=2,这两个i是同一个int变量,需要对i加锁吗?
    如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
    这两个i不需要加锁,因为在java中,它属于原子操作。请参照这里。
    但是若在其他语言中,比如c和c++,这两个i需要加锁,因为i=1实际上包含两个指令周期,它并非原子操作。当然,如果仅仅是赋值而在同线程内部的后面又没有对i进行读取的话,是不需要加锁的。这点类似于数据库中事务处理的那个部分。

6 finalize究竟是怎么一回事?
    finalize是Object对象中的protected方法,被用来在销毁一个对象之前的准备工作。因为是protected的,所以该方法不能在Object所在的包以外的地方被调用,只能在Object所在的包内的类的对象中调用。同时Object的子类也可以复写该方法。参考见这里。

7 如何使用某种方法对许多对象进行修饰,使得这些对象都成为单例模式的?
    写一个构造方法类型为protected的父类(包外不可见,但这里主要的原因是如果使用了private则不可继承,因此采用除private之外可见范围最小的protected。理想情况是只有子类可见而且最好只有静态方法和静态变量。),该类中私有一个静态childMap(Map类型)保持子类类名和一个实例的匹配(如果对应实例为空,应当初始化一个子类,所以子类的构造方法必须是public的。),还有一个静态方法getInstance(String name)可以返回静态map中的指定单例。让其他类继承该类,并且实现一个静态方法getMyInstance()调用其父类静态方法getInstance(childClassName)获得父类中的那个静态childMap中的子类自己的单例。这样当我们需要一个子类的单例时,只需要调用子类的静态方法即可获得子类的单例。注意,由于子类的构造子是public的,如果用new则可获得其他的对象。这是这种方法的缺点。另一个缺点是,每一个子类单例的存在都伴随着父类的实例的存在,这是另外一个缺点。参考见这里。

8 String和StringBufer的区别在哪里?
    String用来表示大小不会改变的字符串,StringBufer用来表示大小经常改变的字符串。对于会变化的字符串来说,StringBufer的效率更高。因为String的扩展实际上是创建了StringBufer对象完成的。 详细原因请见这里。通过资料发现字节码是什么东西了,似乎是jvm层的“汇编”。

9 CGI与Servlet的区别在哪里?
    主要在于CGI只能对应与一个请求,而Servlet可以为多个请求服务。另外。。。。待续

LINUX疑惑点:
1 远程登录的命令。ssh telnet sftp
2 如何查看文件大小?ls -l
3 如何查看磁盘空间大小?df  查看磁盘空间 或者 du 查看当前目录和各个子目录的大小
4 如何创建新用户?useradd
  例1:useradd –d /usr/sam -m sam   此命令创建了一个用户sam,
  其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。
  例2:useradd -s /bin/sh -g group –G adm,root gem   此命令新建了一个用户gem,
    该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
  评论这张
 
阅读(721)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018