一、逻辑思维能力考核:
问题1:
3个人去投宿,一晚30元三个人每人掏了10元凑够30元交给了老板后来老板说今天优惠只要25元就够了,拿出5元命令服务生退还给他们,服务生偷偷藏起了2元,然后,把剩下的3元钱分给了那三个人,每人分到1元这样,一开始每人掏了10元,现在又退回1元,也就是10 - 1 = 9,每人只花了9元钱,3个人每人9元,3×9 = 27元 + 服务生藏起的2元 = 29元,还有一元钱去了哪里?
问题2:
有10个外形完全一样的小球,其中有一个小球的密度比别的小球大目前你手中只有一个天平,问:最少需要称几次,才能找出这个密度较大的小球
问题3:
有10个外形完全一样的小球,其中有一个小球密度与其他小球不一致目前你手中只有一个天平,问:最少需要称几次,才能找出这个密度与其他小球不一致的小球,并且还要判断出这个小球是重还是轻?
二、Linux应用能力考核:
1、在路径/etc下,创建一个叫做“dir1”的路径
mkdir /etc/dir1
2、在dir1路径下,创建一个文件file1
touch /etc/dir1/file1
3、将file1文件赋权,给读、写权限
chmod u+rw /etc/dir1/file1
4、在file1文件中,输入“hello world!”
echo 'hello world!' >> /etc/dir1/file1
5、将file1文件,拷贝到/etc/dir2路径下
cp /etc/dir1/file1 /etc/dir2
6、将/etc/dir2路径下的file1文件,file2文件,file3文件合并,生成file文件
cat /etc/dir2/file1 /etc/dir2/file2 /etc/dir2/file3 >/etc/dir2/file
7、显示/etc/dir2路径下的所有文件,并查看每个文件的权限
ll /etc/dir2
8、显示当前的工作路径
pwd
9、将redis - 6.0.5.tar.gz包解压缩
tar -zxvf redis - 6.0.5.tar.gz
10、显示当前所有的java进程
ps -ef | grep java
11、将进程号为“11267”的进程杀死
kill 11267
三、实战测试
问题1:
假设某服务器已经安装JDK1.7.0,以及apache - tomcat - 7.0.33请问:
1.1如何验证jdk是否安装成功?(假设没有成功,是由于环境变量原因)
java -version
1.2如何设置环境变量
vim /etc/profile
export JAVA_HOME=/path/to/jdk
export PATH=$PJAVA_HOME/bin:$PATH
source /etc/profile
1.3通过tomcat部署web项目的方法?(至少说两种)
#第一种:
web项目打包成war包,放到Tomcat的webapps目录下,启动Tomcat会自动解压部署
#第二种:
在Tomcat的conf\Catalina\localhost下创建一个xml文件,配置<Context docBase="项目实际路径" />启动Tomcat即可部署
问题2:
数据库相关操作(基于student表、teacher表、score表、course表,表结构如下)
2.1student表(学生表)
字段:
S_ID(VARCHAR2):学生编号:
S_NAME(VARCHAR2):学生姓名:S_BIRTH(VARCHAR2):生日:
S_SEX(VARCHAR2):性别:
S_IC_ID(VARCHAR2):身份证号:
S_ID | S_NAME | S_BIRTH | S_SEX | S_IC_ID |
---|---|---|---|---|
01 | 小明 | 110102199001011619 | ||
02 | 小李 | 110104199012211630 | ||
03 | 小吴 | 110103199005061222 | ||
04 | 小王 | 110104199008061173 | ||
05 | 小红 | 110103199112018221 | ||
06 | 小杨 | 110109199203014722 | ||
07 | 小张 | 110228198907018304 | ||
08 | 小赵 | 110111199001201382 | ||
09 | 小侯 | 110114199401201677 |
2.2teacher表(教师表)
字段:
T_ID(VARCHAR2):教师编号
T_NAME(VARCHAR2):教师姓名
T_ID | T_NAME |
---|---|
01 | 张三 |
02 | 李四 |
03 | 王五 |
2.3course表(课程表)
字段:
C_ID(VARCHAR2):课程编号;
C_NAME(VARCHAR2):课程名称;
T_ID(VARCHAR2):教师编号
C_ID | C_NAME | T_ID |
---|---|---|
01 | 语文 | 02 |
02 | 数学 | 01 |
03 | 英语 | 03 |
2.4score表(成绩表)
字段:
S_ID(VARCHAR2):学生编号;
C_ID(VARCHAR2):课程编号;
S_SCORE(NUMBER):分数
S_ID | C_ID | S_SCORE |
---|---|---|
01 | 01 | 80 |
01 | 02 | 90 |
01 | 03 | 99 |
02 | 01 | 70 |
02 | 02 | 60 |
02 | 03 | 80 |
03 | 01 | 80 |
03 | 02 | 80 |
03 | 03 | 80 |
04 | 01 | 50 |
04 | 02 | 30 |
04 | 03 | 20 |
05 | 01 | 76 |
05 | 02 | 87 |
05 | 03 | 95 |
06 | 01 | 88 |
06 | 02 | 34 |
06 | 03 | 66 |
07 | 01 | 89 |
07 | 02 | 98 |
07 | 03 | 59 |
08 | 01 | 88 |
08 | 02 | 67 |
09 | 02 | 88 |
09 | 03 | 65 |
答题:
1. 按照身份证号的规则(从身份证号第7位到第14位表示出生年月日),将学生的出生日期计算出来,以date格式,存储到S_BIRTH字段中
UPDATE student
SET S_BIRTH = TO_DATE(SUBSTR(S_IC_ID, 7, 8), 'YYYYMMDD');
2. 按照身份证号的规则(倒数第二位如果是单数,则是男生如果是双数,则是女生),将学生的性别计算出来,并存储到S_SEX字段中
UPDATE student
SET S_SEX = CASE WHEN MOD(TO_NUMBER(SUBSTR(S_IC_ID, -2, 1)), 2) = 1 THEN '男' ELSE '女' END;
3. 查询出生日期在“1990 - 07 - 01”到“1992 - 02 - 01”中的学生
SELECT *
FROM student
WHERE S_BIRTH BETWEEN TO_DATE('1990-07-01', 'YYYY-MM-DD') AND TO_DATE('1992-02-01', 'YYYY-MM-DD');
4. 查询每门课程的总成绩以及平均成绩,按课程编码,课程名称,总成绩、平均成绩显示
SELECT c.C_ID, c.C_NAME, SUM(s.S_SCORE) AS total_score, AVG(s.S_SCORE) AS avg_score
FROM course c
JOIN score s ON c.C_ID = s.C_ID
GROUP BY c.C_ID, c.C_NAME;
5. 给教师表,增加一个“T_SALARY”字段,字段要求是浮点数,保留两位小数
ALTER TABLE teacher
ADD T_SALARY NUMBER(10, 2);
6. 查询“语文”课程的成绩单,要求显示学生编号、学生姓名、成绩分数,并进行排名
SELECT s.S_ID, st.S_NAME, sc.S_SCORE
FROM score sc
JOIN student st ON sc.S_ID = st.S_ID J
OIN course c ON sc.C_ID = c.C_ID
WHERE c.C_NAME = '语文'
ORDER BY sc.S_SCORE DESC;
7. 查询"语文"课程比"数学"课程成绩高的学生的姓名、身份证号、及课程分数
SELECT st.S_NAME, st.S_IC_ID, sc1.S_SCORE
FROM student st
JOIN score sc1 ON st.S_ID = sc1.S_ID
JOIN course c1 ON sc1.C_ID = c1.C_ID
JOIN score sc2 ON st.S_ID = sc2.S_ID
JOIN course c2 ON sc2.C_ID = c2.C_ID
WHERE c1.C_NAME = '语文' AND c2.C_NAME = '数学' AND sc1.S_SCORE > sc2.S_SCORE;
8. 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
SELECT st.S_ID, st.S_NAME, AVG(sc.S_SCORE) AS avg_score
FROM student st
JOIN score sc ON st.S_ID = sc.S_ID
GROUP BY st.S_ID, st.S_NAME
HAVING AVG(sc.S_SCORE) >= 60;
9. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
SELECT st.S_ID, st.S_NAME, COUNT(sc.C_ID) AS course_count, SUM(sc.S_SCORE) AS total_score FROM student st
LEFT JOIN score sc ON st.S_ID = sc.S_ID
GROUP BY st.S_ID, st.S_NAME;
10. 查询"王"姓老师的数量
SELECT COUNT(*)
FROM teacher
WHERE T_NAME LIKE '王%';
11. 查询学过"张三"老师授课的同学的信息
SELECT st.*
FROM student st
JOIN score sc ON st.S_ID = sc.S_ID
JOIN course c ON sc.C_ID = c.C_ID
JOIN teacher t ON c.T_ID = t.T_ID
WHERE t.T_NAME = '张三';
12. 查询没学过"李四"老师授课的同学的信息
SELECT *
FROM student
WHERE S_ID NOT IN (
SELECT DISTINCT S_ID
FROM score
JOIN course ON score.C_ID = course.C_ID
JOIN teacher ON course.T_ID = teacher.T_ID
WHERE teacher.T_NAME = '李四'
);
13. 查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
SELECT st.*
FROM student st
JOIN score sc1 ON st.S_ID = sc1.S_ID AND sc1.C_ID = '01'
JOIN score sc2 ON st.S_ID = sc2.S_ID AND sc2.C_ID = '02';
14. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECT st.S_ID, st.S_NAME, sc.C_ID, sc.S_SCORE, AVG(sc.S_SCORE) OVER (PARTITION BY st.S_ID) AS avg_score
FROM student st
JOIN score sc ON st.S_ID = sc.S_ID
ORDER BY AVG(sc.S_SCORE) OVER (PARTITION BY st.S_ID) DESC;
15. 查询各科成绩最高分、最低分和平均分:以如下形式显示:
课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
(及格为>=60,中等为:70 - 80,优良为:80 - 90,优秀为:>=90)
SELECT c.C_ID, c.C_NAME,
MAX(sc.S_SCORE) AS max_score,
MIN(sc.S_SCORE) AS min_score,
AVG(sc.S_SCORE) AS avg_score,
SUM(CASE WHEN sc.S_SCORE >= 60 THEN 1 ELSE 0 END) / COUNT(*) * 100 AS pass_rate,
SUM(CASE WHEN sc.S_SCORE >= 70 AND sc.S_SCORE < 80 THEN 1 ELSE 0 END) / COUNT(*) * 100 AS medium_rate,
SUM(CASE WHEN sc.S_SCORE >= 80 AND sc.S_SCORE < 90 THEN 1 ELSE 0 END) / COUNT(*) * 100 AS good_rate,
SUM(CASE WHEN sc.S_SCORE >= 90 THEN 1 ELSE 0 END) / COUNT(*) * 100 AS excellent_rate
FROM course c
JOIN score sc ON c.C_ID = sc.C_ID
GROUP BY c.C_ID, c.C_NAME;