SQL数据库面试题以及答案(50例题)

编程之家收集整理的这篇文章主要介绍了SQL数据库面试题以及答案(50例题)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

搜索热词

sql常见面试题

1.用一条sql 语句 查询出每门课都大于80 分的学生姓名

name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name="" from="" table="" group="" by="" having="">80

2. 学生表 如下:自动编号   学号   姓名 课程编号 课程名称 分数1        2005001 张三 0001     数学    692        2005002 李四 0001      数学    893        2005001 张三 0001      数学    69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?

答:select a.name,b.namefrom team a,team b where a.name < b.name

4.请用sql 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。数据库名:JcyAudit ,数据集:Select * from TestDB

5.面试题:怎么把这样一个表儿year   month amount1991   1     1.11991   2     1.21991   3     1.31991   4     1.41992   1     2.11992   2     2.21992   3     2.31992   4     2.4查成这样一个结果year m1   m2   m3   m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year

6. 说明:复制表( 只复制结构, 源表名:a新表名:b) sql: select * into b from a where 1<>1       (where1=1,拷贝表结构和数据内容)Oracle:create table b

As

Select * from a where 1=2

[<>(不等于)(sql Server Compact)

比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。]

7. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b) sql: insert into b(a,c) select d,e,f from a; 8. 说明:显示文章、提交人和最后回复时间sql: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9. 说明:外连接查询( 表名1 :a表名2 :b)sql: select a.a,a.b,a.c,b.c,b.d,b.f from a LEFT OUTER JOIN b ON a.a = b.c

ORACLE:select a.a,b.f from a,b

511. 说明:两张关联表,删除主表中已经在副表中没有的信息sql: Delete from info where not exists (select * from infobz where info.infid=infobz.infid )

12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的sql 语句怎么写?

update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);

13.高级sql 面试题

原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句

select courseid,coursename,score,decode(sign(score-60),-1,'fail','pass') as mark from course

完全正确sql> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)score NUMBERsql> select * from course_v;COURSEID COURSENAME score---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80sql> select courseid,decode(sign(score-60),'pass') as mark from course_v;COURSEID COURSENAME score MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass

sql面试题(1)

create table testtable1(id int IDENTITY,department varchar(12) )

select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1   设计2   市场3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条sql语句,怎么显示如下结果id dptID department name1   1      设计        张三2   1      设计        李四3   2      市场        王五4   3      售后        彭六5   4      黑人        陈七*/

答案:

SELECT testtable2.*,ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID

也做出来了可比这方法稍复杂。

sql面试题(2)

有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1 12 02 2 8 01 3 11 01 3 8 03 其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用sql语句实现将上表中的数据合并,合并后的数据为: p_ID s1_id s2_id s3_id 1 10 12 0 2 8 0 0 3 11 0 8 其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

结果:

select p_id,sum(case when s_id=1 then p_num else 0 end) as s1_id,sum(case when s_id=2 then p_num else 0 end) as s2_id,sum(case when s_id=3 then p_num else 0 end) as s3_idfrom myPro group by p_id

1、触发器的作用?

答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

2、什么是存储过程?用什么来调用

答:存储过程是一个预编译的sql 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次sql ,使用存储过程比单纯sql 语句执行要快。可以用一个命令对象来调用存储过程。

3、索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加数据库的尺寸大小。

3、什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

4、维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

答:我是这样做的,尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

5、什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的sql 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID 测试,即原子性,一致性,隔离性和持久性。

锁:在所以的 DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

6、什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

7、为管理业务培训信息,建立3个表:

S(S#,SN,SD,SA)S#,SA分别代表学号,学员姓名,所属单位,学员年龄

C(C#,CN)C#,CN分别代表课程编号,课程名称

SC(S#,C#,G) S#,G分别代表学号,所选的课程编号,学习成绩

(1)使用标准sql嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?

答案:select s#,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)

(2) 使用标准sql嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?

答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’

(3) 使用标准sql嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?

答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)

(4)查询选修了课程的学员人数

答:select 学员人数=count(distinct s#) from sc

(5) 查询选修课程超过5门的学员学号和所属单位?

答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)

sql面试题(4)

1.查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A2.查询表A中存在ID重复三次以上的记录,完整的查询语句如下:select * from(select count(ID) as count from table group by ID)T where T.count>3

sql面试题(5)

在面试应聘的sql Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。

你能向我简要叙述一下sql Server 2000中使用的一些数据库对象吗?

你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。

NULL是什么意思?

NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。

NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的sql Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。

什么是索引?sql Server 2000里有什么类型的索引?

任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。

简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在sql Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。

什么是主键?什么是外键?

主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

什么是触发器?sql Server 2000有什么不同类型的触发器?

让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。

触发器是一种专用类型的存储过程,它被捆绑到sql Server 2000的表格或者视图上。在sql Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。

AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。

另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

你可以用什么来确保表格里的字段只接受特定范围里的值?

这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。

返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。

OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。

什么是相关子查询?如何使用这些查询?

经验更加丰富的开发人员将能够准确地描述这种类型的查询

相关子查询是一种包含子查询的特殊类型的查询查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。


总结

以上是编程之家为你收集整理的SQL数据库面试题以及答案(50例题)全部内容,希望文章能够帮你解决SQL数据库面试题以及答案(50例题)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的运维面试题相关文章

无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优和linux常见面试题
北京朗途融通信息科技有限公司 1、用_________创建一个隐藏的共享文件夹 2、常用的三种解析计算机命的方法有______,______,______。
1、如何实现Nginx代理的节点访问日志记录客户的IP而不是代理的IP? 在nginx代理文件中怎加一行配置文件:proxy_set_header X-Real-IP $remote_addr;
PS:这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用。分享出来,供大家来参考。原作者佚名。源代码如下:#!/bin/sh#modprobe ipt_MASQUERADEmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpiptables -Fiptables -t nat -Fiptables -Xiptables -t nat -X###########################INPUT键###################################iptables -P INPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT#允许内网samba,smtp,pop3,连接iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT#允许dns连接iptables -A INPUT -p tcp --dport 1723 -j ACCEPTiptables -A INPUT -p gre -j ACCEPT#允许外网vpn连接iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "iptables -A INPUT -p icmp -j DROP#禁止icmp通信-ping 不通iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE#内网转发iptables -N syn-floodiptables -A INPUT -p tcp --syn -j syn-floodiptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURNiptables -A syn-flood -j REJECT#防止SYN攻击 轻量#######################FORWARD链###########################iptables -P FORWARD DROPiptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPTiptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPTiptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPTiptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT#允许 vpn客户走vpn网络连接外网iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROPiptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ通信iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROPiptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROPiptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROPiptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP#禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROPiptables -A FORWARD -p tcp -m ipp2p --ares -j DROPiptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP#禁止BT连接iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24#######################################################################sysctl -w net.ipv4.ip_forward=1 &>/dev/null#打开转发#######################################################################sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null#打开 syncookie (轻量级预防 DOS 攻击)sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null#设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null#设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)#######################################################################iptables -I INPUT -s 192.168.0.50 -j ACCEPTiptables -I FORWARD -s 192.168.0.50 -j ACCEPT#192.168.0.50是我的机子,全部放行!############################完#########################################
 1. 你听说过Linux下面的iptables和Firewalld么?知不知道它们是什么,是用来干什么的?答案 : iptables和Firewalld我都知道,并且我已经使用iptables好一段时间了。iptables主要由C语言写成,并且以GNU GPL许可证发布。它是从系统管理员的角度写的,最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道,来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块,它执行包过滤的任务。Firewalld是RHEL/CentOS 7(也许还有其他发行版,但我不太清楚)中最新的过滤规则的实现。它已经取代了iptables接口,并与netfilter相连接。2. 你用过一些iptables的GUI或命令行工具么?答案 : 虽然我既用过GUI工具,比如与Webmin结合的Shorewall;以及直接通过终端访问iptables,但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员,而终端适合有经验的管理员。3. 那么iptables和firewalld的基本区别是什么呢?答案 : iptables和firewalld都有着同样的目的(包过滤),但它们使用不同的方式。iptables与firewalld不同,在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易,但是两者都可以完成同样的任务。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。4. 如果有机会的话,你会在你所有的服务器上用firewalld替换iptables么?答案 : 我对iptables很熟悉,它也工作的很好。如果没有任何需求需要firewalld的动态特性,那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下,目前为止,我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢?”。上面是我自己的想法,但如果组织愿意用firewalld替换iptables的话,我不介意。5. 你看上去对iptables很有信心,巧的是,我们的服务器也在使用iptables。iptables使用的表有哪些?请简要的描述iptables使用的表以及它们所支持的链。答案 : 谢谢您的赞赏。至于您问的问题,iptables使用的表有四个,它们是:Nat 表Mangle 表Filter 表Raw 表Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如,如果一个通过某个接口的包被修饰(修改了IP地址),该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤,由NAT表支持的链称为PREROUTING 链,POSTROUTING 链和OUTPUT 链。Mangle表 : 正如它的名字一样,这个表用于校正网络包。它用来对特殊的包进行修改。它能够修改不同包的头部和内容。Mangle表不能用于地址伪装。支持的链包括PREROUTING 链,OUTPUT 链,Forward 链,Input 链和POSTROUTING 链。Filter表 : Filter表是iptables中使用的默认表,它用来过滤网络包。如果没有定义任何规则,Filter表则被当作默认的表,并且基于它来过滤。支持的链有INPUT 链,OUTPUT 链,FORWARD 链。Raw表 : Raw表在我们想要配置之前被豁免的包时被使用。它支持PREROUTING 链和OUTPUT 链。6. 简要谈谈什么是iptables中的目标值(能被指定为目标),他们有什么用答案 : 下面是在iptables中可以指定为目标的值:ACCEPT : 接受包QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方)DROP : 丢弃包RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则7. 让我们来谈谈iptables技术方面的东西,我的意思是说实际使用方面你怎么检测在CentOS中安装iptables时需要的iptables的rpm?答案 : iptables已经被默认安装在CentOS中,我们不需要单独安装它。但可以这样检测rpm:# rpm -qa iptablesiptables-1.4.21-13.el7.x86_64如果您需要安装它,您可以用yum来安装。# yum install iptables-services8. 怎样检测并且确保iptables服务正在运行?答案 : 您可以在终端中运行下面的命令来检测iptables的状态。# service status iptables [On CentOS 6/5]# systemctl status iptables [On CentOS 7]如果iptables没有在运行,可以使用下面的语句---------------- 在CentOS 6/5下 ----------------# chkconfig --level 35 iptables on# service iptables start---------------- 在CentOS 7下 ----------------# systemctl enable iptables# systemctl start iptables我们还可以检测iptables的模块是否被加载:# lsmod | grep ip_tables9. 你怎么检查iptables中当前定义的规则呢?答案 : 当前的规则可以简单的用下面的命令查看:# iptables -L示例输出Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination10. 你怎样刷新所有的iptables规则或者特定的链呢?答案 : 您可以使用下面的命令来刷新一个特定的链。# iptables --flush OUTPUT要刷新所有的规则,可以用:# iptables --flush11. 请在iptables中添加一条规则,接受所有从一个信任的IP地址(例如,192.168.0.7)过来的包。答案 : 上面的场景可以通过运行下面的命令来完成。# iptables -A INPUT -s 192.168.0.7 -j ACCEPT我们还可以在源IP中使用标准的斜线和子网掩码:# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT# iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT12. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?答案 : 但愿ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。# iptables -A INPUT -p tcp --dport 22 -j ACCEPTREJECT ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j REJECTDENY ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DENYDROP ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DROP13. 让我给你另一个场景,假如有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?答案 : 这时,我所需要的就是在iptables中使用‘multiport‘选项,并将要封锁的端口号跟在它后面。上面的场景可以用下面的一条语句搞定:# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j DROP可以用下面的语句查看写入的规则。# iptables -LChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedDROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcacheChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination 
下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。 1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维开发运维:是给应用运维开发运维工具和运维平台的应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑开发运维、应用运维和系统运维他们的工作是环环相扣的2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?游戏运营要做的一个事情除了协调工作以外还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划3、现在给你三百台服务器,你怎么对他们进行管理?管理3百台服务器的方式:1)设定跳板机,使用统一账号登录,便于安全与登录的考量。2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份)RAID整合方式有很多,常用的:0 1 5 10RAID 0,可以是一块盘和N个盘组合 其优点读写快,是RAID中最好的缺点:没有冗余,一块坏了数据就全没有了RAID 1,只能2块盘,盘的大小可以不一样,以小的为准10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘特点,读写性能一般,读还好一点,写不好冗余从好到坏:RAID1 RAID10 RAID 5 RAID0性能从好到坏:RAID0 RAID10 RAID5 RAID1成本从低到高:RAID0 RAID5 RAID1 RAID10单台服务器:很重要盘不多,系统盘,RAID1数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)有多台,监控、应用服务器,RAID0 RAID5我们会根据数据的存储和访问的需求,去匹配对应的RAID级别 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?LVS: 是基于四层的转发HAproxy: 是基于四层和七层的转发,是专业的代理服务器Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发区别: LVS由于是基于四层的转发所以只能做端口的转发而基于URL的、基于目录的这种转发LVS就做不了工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?Squid、Varinsh和Nginx都是代理服务器什么是代理服务器:能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 区别:1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业      但是本身不支持特性挺多,只能缓存静态文件2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境工作中选择:要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。7、Tomcat和Resin有什么区别,工作中你怎么选择?区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些但稳定性和java程序的兼容性,应该是比resin的要好工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容8、什么是中间件?什么是jdk? 中间件介绍:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递通过中间件,应用程序可以工作于多平台或OS环境。jdk:jdk是Java的开发工具包它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境9、讲述一下Tomcat8005、8009、8080三个端口的含义?8005==》 关闭时使用8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口8080==》 一般应用使用10、什么叫CDN?- 即内容分发网络- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度11、什么叫网站灰度发布?灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度12、简述DNS进行域名解析的过程?用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端13、RabbitMQ是什么东西?RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地14、讲一下Keepalived的工作原理?在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息15、讲述一下LVS三种模式的工作过程?LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 一、NAT模式(VS-NAT)原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时大量的数据包都交汇在负载均衡器那,速度就会变慢! 二、IP隧道模式(VS-TUN)原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RSRS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上 三、直接路由模式(VS-DR)原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?mysql的innodb如何定位锁问题:在使用 show engine innodb status检查引擎状态时,发现了死锁问题在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)innodb_trx         ## 当前运行的所有事务innodb_locks     ## 当前出现的锁innodb_lock_waits  ## 锁等待的对应关系 mysql如何减少主从复制延迟:如果延迟比较大,就先确认以下几个因素:1. 从库硬件比主库差,导致复制延迟2. 主从复制单线程,如果主库写并发太大,来不及传送到从库    就会导致延迟。更高版本的mysql可以支持多线程复制3. 慢SQ
SQL常见面试题1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>802. 学生表 如下:自动编号   学号   姓名 课程编号 课程名称 分数1        2005001 张三 0001     数学    692        2005002 李四 0001      数学    893        2005001 张三 0001      数学    69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select a.name, b.namefrom team a, team b where a.name < b.name4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************5.面试题:怎么把这样一个表儿year   month amount1991   1     1.11991   2     1.21991   3     1.31991   4     1.41992   1     2.11992   2     2.21992   3     2.31992   4     2.4查成这样一个结果year m1   m2   m3   m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year*******************************************************************************6. 说明:复制表( 只复制结构, 源表名:a新表名:b) SQL: select * into b from a where 1<>1       (where1=1,拷贝表结构和数据内容)Oracle:create table bAsSelect * from a where 1=2 [<>(不等于)(SQL Server Compact)  比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。] 7. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b) SQL: insert into b(a, b, c) select d,e,f from a; 8. 说明:显示文章、提交人和最后回复时间SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9. 说明:外连接查询( 表名1 :a表名2 :b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.cORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,bwhere a.a = b.c(+)10. 说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>511. 说明:两张关联表,删除主表中已经在副表中没有的信息SQL: Delete from info where not exists (select * from infobz where info.infid=infobz.infid )*******************************************************************************12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的SQL 语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);*************************************************************************** 13.高级sql 面试题原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 passSQL面试题(1)create table testtable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1   设计2   市场3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条SQL语句,怎么显示如下结果id dptID department name1   1      设计        张三2   1      设计        李四3   2      市场        王五4   3      售后        彭六5   4      黑人        陈七*/答案:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID也做出来了可比这方法稍复杂。sql面试题(2)有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注