360 面试题:
- 请拿出 B 表中的 accd(A 表中和 B 表中的一样的数据)?
- a = “abbbccc”,用正则匹配为 abccc,不管有多少 b,就出现一次?
- xpath 使用的什么库?
- py2 和 py3 的区别?
- Redis 里面 list 内容的长度?
- 多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?
- Mysql 怎么限制 IP 访问?
- 带参数的装饰器?
考查范围:
- 数据库 - 内连接查询,限制ip访问
- 正则表达式 - re.sub()
- 爬虫 - lxml,xpath
- python基础 - python2与python3的区别
- 多任务编程 - 多线程,互斥锁
- 装饰器 - 带参数装饰器
参考答案
-
请拿出 B 表中的 accd(A 表中和 B 表中的一样的数据)?
答:select * from B inner join on B.name = A.name
考查:数据库连接查询之内连接查询 -
a = “abbbccc”,用正则匹配为 abccc,不管有多少 b,就出现一次?
答:思路是不管有多少个 b 替换成一个
re.sub(r’b+’, ‘b’, a)
考查:正则表达式之re.sub -
xpath 使用的什么库?
答:lxml
考查:爬虫lxml -
py2 和 py3 的区别?
答:这里例举 5 条
print 在 Python3 中是函数必须加括号,Python2 中 print 为 class。
Python2 中使用 xrange,Python3 使用 range。
Python2 中默认的字符串类型默认是 ASCII,Python3 中默认的字符串类型是 Unicode。
Python2 中除法的结果是整型,Python3 中是浮点类型。
Python2 中声明元类:metaclass = MetaClass,Python3 中声明元类:class
newclass(metaclass=MetaClass):pass。 -
Redis 里面 list 内容的长度?
答:len key_name
考查:redis中的list -
多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?
答:创建一个已访问数据列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候先查看数据是否已经在已访问的列表中,若已存在就直接跳过。
考查:多线程,互斥锁 -
Mysql 怎么限制 IP 访问?
答:grant all privileges on . to ‘数据库中用户名’@’ip 地址’ identified by ‘数据库密码’;
(授权某个ip的用户可以通过密码访问数据库)
考查:数据库 -
带参数的装饰器?
答:带定长的装饰器
考查:装饰器
# 添加输出日志的功能
def logging(flag):
def decorator(fn):
def inner(num1, num2):
if flag == "+":
print("--正在努力加法计算--")
elif flag == "-":
print("--正在努力减法计算--")
result = fn(num1, num2)
return result
return inner
# 返回装饰器
return decorator
# 使用装饰器装饰函数
@logging("+")
def add(a, b):
result = a + b
return result
@logging("-")
def sub(a, b):
result = a - b
return result
result = add(1, 2)
print(result)
result = sub(1, 2)
print(result)