第一阶段
1、第一关:图片数据查询
SELECT * FROM((SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 3) union
(SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 19, 3)
union
(SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 43, 3))temp order by title desc;
思路:(1)找到时间和日期的转换函数转换时间和日期,(2)按照时间和日期倒序排序所有记录,(3)找到25号、24号、23号的最后三本书的记录,并输出;(4)将三条记录关联并按所给样式排序;(5)在column1列的数据之前加入空格。(真坑,在输出这里还搞个格式问题,其实也是考察怎怎么用SQL语法在字符串中的应用)
第二阶段
1、 第一关:特定 x86 宏相关代码识别
# -*- coding: utf-8 -*-
"""
@Date : 2020/8/29 13:30
@Author : LGD
@File :test02.py
@IDE :PyCharm
"""
import fileinput
# 根据题目要求将能在×86平台运行的语句放入列表中存储
ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else']
ops2 = ['#endif']
def count_X86_code(filename):
lst = list()
# 读取输入文件的内容,并将每一行的内容去掉换行符和空格存储到列表中,最后列表中存的是一个个语句
for line in fileinput.input(filename):
text = line.replace('\n', '').replace('\r', '').strip()
lst.append(text)
out = list()
i = 0
for line in lst: # 逐语句遍历
i = i + 1 # 记录文件中每行每行内容的行数
# 读取存储到文件中的内容是否有能在×86平台运行的语句
if line in ops1:
# 找到开始语句
str1 = '起始行为' + str(i + 1) # 记录起始行
temp = lst[i:]
for text in temp:
if text in ops2:
# 找到结束语句
str2 = '结束行为' + str(i + temp.index(text)) # 记录结束行
st = str1 + ',' + str2 + '。' # 为输出格式所做
out.append(st) # 保存找到多条记录
break # 找到一个记录跳出小循环
continue # 寻找下一条记录
# 输出记录
if len(out) == 0:
print('NULL')
else:
for i in out:
print(i)
if __name__ == '__main__':
file_name = input() # 输入要判断的文件
count_X86_code(file_name)
思路:(1)读文件,获取文件中每一行语句并存储;(2)将每一行的语句与能在×86平台运行的宏对比找到起始行,并记录行号;(3)找到结束行,并记录行号,并得到第一条结果;(4)进行后面的比较直到比较完文件中每一行语句找到所有结果。
2、第二关:所有 x86 宏相关代码识别
# -*- coding: utf-8 -*-
"""
@Date : 2020/8/29 10:12
@Author : LGD
@File :test01.py
@IDE :PyCharm
"""
import fileinput
# 与题一类似,只是要比较的语句变多, 因此不再累述。
ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else',
'#if defined(__ATOMIC_HLE_ACQUIRE)', '#ifdef _ATOMIC_HLE_ACQUIRE', '#elif defined(_ATOMIC_HLE_ACQUIRE)',
'#if defined(__ATOMIC_HLE_RELEASE)', '#ifdef __ATOMIC_HLE_RELEASE', '#elif defined(__ATOMIC_HLE_RELEASE)',
'#if defined(__DECIMAL_BID_FORMAT__)', '#ifdef __DECIMAL_BID_FORMAT__', '#elif defined(__DECIMAL_BID_FORMAT__)',
'#if defined(__FXSR__)', '#ifdef __FXSR__', '#elif defined(__FXSR__)',
'#if defined(__GCC_ASM_FLAG_OUTPUTS__)', '#ifdef __GCC_ASM_FLAG_OUTPUTS__', '#elif defined(__GCC_ASM_FLAG_OUTPUTS__)',
'#if defined(__MMX__)', '#ifdef __MMX__', '#elif defined(__MMX__)',
'#if defined(__SEG_FS)', '#ifdef __SEG_FS', '#elif defined(__SEG_FS)',
'#if defined(__SEG_GS)', '#ifdef __SEG_GS', '#elif defined(__SEG_GS)',
'#if defined(__SIZEOF_FLOAT128__)', '#ifdef __SIZEOF_FLOAT128__', '#elif defined(__SIZEOF_FLOAT128__)',
'#if defined(__SIZEOF_FLOAT80__)', '#ifdef __SIZEOF_FLOAT80__', '#elif defined(__SIZEOF_FLOAT80__)',
'#if defined(__SSE2_MATH__)', '#ifdef __SSE2_MATH__', '#elif defined(__SSE2_MATH__)',
'#if defined(__SSE2__)', '#ifdef __SSE2__', '#elif defined(__SSE2__)',
'#if defined(__SSE_MATH__)', '#ifdef __SSE_MATH__', '#elif defined(__SSE_MATH__)',
'#if defined(__SSE__)', '#ifdef __SSE__', '#elif defined(__SSE__)',
'#if defined(__amd64)', '#ifdef __amd64', '#elif defined(__amd64)',
'#if defined(__amd64__)', '#ifdef __amd64__', '#elif defined(__amd64__)',
'#if defined(__code_model_small__)', '#ifdef __code_model_small__', '#elif defined(__code_model_small__)',
'#if defined(__k8)', '#ifdef __k8', '#elif defined(__k8)',
'#if defined(__k8__)', '#ifdef __k8__', '#elif defined(__k8__)',
'#if defined(__x86_64)', '#ifdef __x86_64', '#elif defined(__x86_64)',
'#if defined(i386)', '#ifdef i386', '#elif defined(i386)',
'#if defined(__i386__)', '#ifdef __i386__', '#elif defined(__i386__)',
'#if defined(__X86__)', '#ifdef __X86__', '#elif defined(__X86__)',
'#if defined(_X86_)', '#ifdef _X86_', '#elif defined(_X86_)', ]
ops2 = ['#endif']
def count_X86_code(filename):
lst = list()
for line in fileinput.input(filename):
text = line.replace('\n', '').replace('\r', '').strip()
lst.append(text)
out = list()
i = 0
for line in lst:
i = i + 1
if line in ops1:
str1 = '起始行为' + str(i + 1)
temp = lst[i:]
for text in temp:
if text in ops2:
str2 = '结束行为' + str(i + temp.index(text))
st = str1 + ',' + str2 + '。'
out.append(st)
break
continue
if len(out) == 0:
print('NULL')
else:
for i in out:
print(i)
if __name__ == '__main__':
file_name = input()
count_X86_code(file_name)
思路与第一关一样只是比较的宏多一点。
总结
总体来说,题目都还是考的很基础,第一阶段是考察SQL语句的编写,第二阶段是考察通过程序对文件进行读取;考察的大多数都是语法问题,还有比较易思考的逻辑。如果对基础知识和语法掌握比较好的话,应该很快能完成。