Java****面试宝典(设计模式/算法/Linux篇)
**一.**设计模式和算法
**1.**正则表达式中*?+的作用分别是什么(亿邮)
答: * ? + 都有用来匹配数量的,* 表示 0 或多个,?表示 0 个或 1 个,+ 表示 1 个或多个。
**2.**单例设计模式
答: 单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。 懒汉式 和 饿汉式
**3.**介绍一下简单工厂模式
答: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
**4.**简单说明什么是递归?什么情况会使用?并使用java实现一个简单的递归程序。
答: 一、递归函数,通俗的说就是函数本身自己调用自己…
如:n!=n(n-1)!
你定义函数f(n)=nf(n-1)
而f(n-1)又是这个定义的函数。。这就是递归
二、为什么要用递归:递归的目的是简化程序设计,使程序易读
三、递归的弊端:虽然非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截
四、递归的条件:需有完成任务的语句,需满足递归的要求(减小而不是发散)
**5.**线性表如果要频繁的执行插入和删除操作,该线性表采取的存储结构应该是()
A.散列 B.顺序 C.链式 D.索引
答: C
**6.**在下列排序方法中,不稳定的方法有
A.归并排序与基数排序 B.插进排序与希尔排序
C.堆排序与快速排序 D.选择排序与冒泡排序
答: C
**7.**一个递归算法必须包括()
A.递归部分 B.终止条件和递归部分
C.迭代部分 D.终止条件和迭代部分
答: B
**8.**用某种排序方法对关键字排序(25 、84、21、47、15、27、68、35、20)进行排序时,序列的变化情况如下:
20、15、21、25、47、27、68、35、84
15、20、21、25、35、37、47、68、84
15、20、21、25、27、35、47、68、84
则采用的排序方法是()
A.选择排序 B.希尔排序 C.归并排序 D.快速排序
答:D
**9.**以下哪种排序算法对(1,3,2,4,5,6,7,8,9)进行的排序最快?
A.冒泡 B.快排 C.归并 D.堆排
答: A
**10.**如果在一个排序算法的执行过程中,没有一对元素被比较过两次或以上,则称该排序算法为节俭排序算法,以下算法中是节俭排序算法的有________。
A.插入排序 B.选择排序 C.堆排序 D.归并排序
答: AD
**11.****若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为() **
A.1,2,3 B.9,5,3
C.9,5,2,3 D.9,4,2,3
答: D
**12.**对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47 (4)15 21 25 4784则采用的排序方法是()
A.选择 B.起泡 C.快速 D.插入
答: A
**13.**下面关于二分查找的叙述中正确的是:
A.表必须有序,表可以顺序方式存储,也可以链表方式存储
B.表必须有序且表中数据必须是整型,实型或字符型
C.表必须有序,而且只能从小到大排列
D.表必须有序,且表只能以顺序方式存储
答: D
**14.**简述一下代理模式(Proxy模式)
答: Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,Proxy是代理的意思,我们也许有代理服务器等概念,代理概念可以解释为:在出发点到目的地之间有一道中间层,意为代理。
设计模式中定义:为其他对象提供一种代理以控制对这个对象的访问。
为什么要使用代理模式
授权机制 不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限。
某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动。
举例两个具体情况:
如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片。
如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象。
总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存。所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系。
如何使用代理模式
以论坛系统为例,访问论坛系统的用户有多种类型:注册普通用户、论坛管理者、系统管理者、游客。注册普通用户才能发言,论坛管理者可以管理他被授权的论坛,系统管理者可以管理所有事务等,这些权限划分和管理是使用Proxy完成的。
**二.**Linux
**1. **请解释下列 10 个 shell 命令的用途
top、ps、mv、find、df、cat、chmod、chgrp、grep、wc
top:该命令提供了实时对系统处理器状态的监控,它能够实时显示系统中各个进程的资源占用情况。该命令可以按照对 CPU、内存使用和执行时间对系统任务进程进行排序显示,同时还可以通过交互式命令进行设定显示。
ps:显示系统进程在瞬间的运行动态。 mv:文件/目录改名或变更存储位置。 find:在指定的路径下查找指定文件。
df:检查磁盘空间占用情况。
cat:将文件的内容打印到标准输出。
chmod:改变文件的权限。 chgrp:改变文件所属组。
grep:过滤文本,根据指定的字符串,对文件的每一行进行搜索,如找到,则输出该行内容。
wc:统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
相关题目:写出 **15 个以上你所知道的常用的Linux **命令和它的功能。
ls:列出目录 cp:复制 rm:删除
cat:将文件的内容打印到标准输出 mkdir: 建立目录
tar:打包压缩 ps:查看进程 top:查看机器使用情况 df:检查磁盘空间占用情况
find:在指定路径下查找指定文件 grep:过滤文本
cd:改变当前工作目录 mount:挂载/卸载指定的文件系统
ifconfig:配置网络或显示当前网络接口状态 telnet::远程登录
2.vi****编辑器中,选中、复制、粘贴、删除的命令各是什么
选中:v(以字符为单位),V(以行为单位)复制:y,如 yy,nyy,y1G,yG,y0,y$
粘贴:p(粘贴在光标之后),P(粘贴在光标之前)删除:d,如 dd,ndd,d1G,dG,d$,d0
**3.****获取文件行数 (酷讯) ******
wc -l filename
4.输入文件的最后 5 行到另一个文件中
** **tail -n 5 file1 >> file2
**5.查找文件中包含 hello 的行 (酷讯) **
grep hello filename
**6.****查找当前目录下所有目录名为CVS的子目录的命令 (酷讯) **
find ./CVS -maxdepth 1 -type d -print
**7.**如何让一个程序在后台运行并把输入定向到指定的文件 (酷讯)
可使用命令:nohup 程序 >> 文件名 2>&1 & (注意,2>&1 要放在输出文件名的后面)
**8.**如何把一个文件的内容添加到另一个文件的末尾 (酷讯)
** **cat file1 >> file2
**9.****如何实时的显示一个文件的输出 (酷讯) **
使用 more 或者 less
**10.**定时执行一个程序的方法有什么 (酷讯)
可以使用 at 或者 crontab,其中 at 是处理仅执行一次就结束调度的命令,适用于突发性工作,而 crontab 将会循环一直进行下去,适用于例行性工作。
**11.vi **编辑器中,如何替换指定的字符串 (酷讯) 使用 s 命令,
例如:
:n1,n2s/word1/word2/g,将第 n1 行与 n2 行之间的 word1 替换为word2
:1,$s/word1/word2/g,从第一行到最后一行中的word1 替换为 word2
**12.****当更新后,cvs中文件有冲突时。如何判断哪些你编辑的内容和更新下来的内容(酷讯) **
使用 CVS 时,如果出现冲突,双击冲突的文件(标识为红色),显示文件比较窗口。其中蓝色为需要传入的更新,其中灰色为需要传出的修改,其中红色为需要手工解决的冲突。
可以首先将蓝色需要传入的更新,然后手工解决红色部分,自行选择保留左边还是右边,并选择 mark as merge将文件标志为合并,此时将以左边窗口中的内容为依据向服务器提示传出,即灰色和红色部分都会以左边窗口的内容为依据向服务器提交。
如果冲突文件打开无任何的颜色提示,可选择 update and override,使用服务器上的文件更新本地文件。
**13.**查看磁盘空间使用率的 Linux 命令是什么?查看有哪些系统进程正在运行命令是什么?检测 Linux 性能(cpu,磁盘 io,内存,网络等)都用到哪些命令? (卓望)
查看磁盘空间使用率的命令:df
查看系统进程命令:top
检测 Linux 性能的命令:ps,free,vmstat,netstat
**14.Linux **下终止一个进程用什么命令?打包压缩和解包用什么命令?软连接和硬链接有什么区别?建立软连接的命令是?(卓望)
终止进程的命令:kill 打包压缩和解包命令:tar 建立软连接的命令:ln -s 源文件 目标链接名
硬链接是通过文件系统的 inode 来产生新文件名,而不是新文件,它只是在某个目录新建一条文件名链接到某 inode 号码的管理记录而已,而软链接是创建一个独立的文件,该文件会让数据的读取指向它链接的那个文件的文件名,类似于 windows 中的快捷方式。
**15.**说说 Linux 下的 find 命令和grep 命令的区别
find:在磁盘/分区中找到文件,可以配 type 可以配 size time 等,通过文件名或文件大小或访问时间找到指定文件。
grep:查找文件里符合条件的字符串,并把匹配的行打印出来,可以使用正则表达式。
**16.**有 mail.log 的一个文档,内容为若干邮件地址,其中用’\n’将邮件地址分隔。要求从中挑选出 sina.com 的邮件地址(包括从文件读取、过滤到列印出来)。
mail.log 内容如下: [email protected] [email protected] [email protected]
[email protected] 参考答案:
cat mail.log | grep sina.com
或者:
#!/bin/bash
while read row ; do case $row in
sina.com) echo $row ;; esac done < mail.log
17.简述DNS进行域名解析的过程。
参考答案:
首先,客户端发出DNS请求翻译Ip地址或主机名。DNS服务器在收到客户机的请求 后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答 信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查 找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果 发给客户机。
(4)若没有找到,则返回错误信息。
**18.**简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程。
参考答案:
Linux通过i节点表将文件的逻辑结构和物理结构进行转换。
i 节点是一个64字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件 所有者、文件的存取许可方式以及文件的类型等重要信息。在i节点表中最重要的内容 是磁盘地址表。在磁盘地址表中有13个块号,文件将以块号在磁盘地址表中出现的顺 序依次读取相应的块。Linux文件系统通过把i节点和文件名进行连接,当需要读取该 文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的i 节点号,通过该i节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。
**19.**简述进程的启动、终止的方式以及如何进行进程的查看。
参考答案:
在Linux中启动一个进程有手工启动和调度启动两种方式:
(1)手工启动
用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:
①前台启动:直接在SHELL中输入命令进行启动。
②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2)调度启动
系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的 时间和场合,到时候系统会自动完成该任务。
经常使用的进程调度命令为:at、batch、crontab。
**20. **简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么? 常用的ftp文件传输命令是什么?
参考答案:
(1)ftp有两种登录方式:匿名登录和授权登录。使用匿名登录时,用户名为: anonymous,密码为:任何合法email地址;使用授权登录时,用户名为用户在远程系统 中的用户帐号,密码为用户在远程系统中的用户密码。
区别:使用匿名登录只能访问ftp目录下的资源,默认配置下只能下载;而授权登录访 问的权限大于匿名登录,且上载、下载均可。
(2)ftp文件传输有两种文件传输模式:ASCII模式和binary模式。ASCII模式用来传输 文本文件,其他文件的传输使用binary模式。
(3)常用的ftp文件传输命令为:bin、asc、put、get、mput、mget、prompt、bye
**21. **当文件系统受到破坏时,如何检查和修复系统?
参考答案:
成功修复文件系统的前提是要有两个以上的主文件系统,并保证在修复之前首先卸载将 被修复的文件系统。
使用命令fsck对受到破坏的文件系统进行修复。fsck检查文件系统分为5步,每一步 检查系统不同部分的连接特性并对上一步进行验证和修改。在执行 fsck命令时,检查 首先从超级块开始,然后是分配的磁盘块、路径名、目录的连接性、链接数目以及空闲 块链表、i-node。
**22. **若下达rmdir命令来删除某个已存在的目录,但无法成功,请说明可能的原因
参考答案:
此目录可能不存在,或者目录不为空,或者目录中有隐含的文件存在,或者目录被设置 了权限。
解决办法:
先修改权限,再使用 rm -r 命令删除
**23.**文件exer1的访问权限为rw-r–r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪个命令是对的?
A.chmod a+x g+w exer1 B.chmodg+w exer1
C.chmod 765 exer1 D.chmodo+x exer1
答: A