2021 面试记录
# 智源
# 按照班级查询每个班成绩最高的学生的成绩
CREATE TABLE tableName
(
id varchar(300),
name varchar(300),
classid varchar(300),
score int(10)
);
INSERT INTO tableName (id, name, classid, score)
VALUES
('1', 'a', '1', 99),
('2', 'b', '1', 88),
('3', 'c', '1', 60),
('4', 'd', '2', 80),
('5', '5', '2', 90);
mysql> select * from tableName;
+------+------+---------+-------+
| id | name | classid | score |
+------+------+---------+-------+
| 1 | a | 1 | 99 |
| 2 | b | 1 | 88 |
| 3 | c | 1 | 60 |
| 4 | d | 2 | 80 |
| 5 | e | 2 | 90 |
+------+------+---------+-------+
5 rows in set (0.00 sec)
-- 只查询班级和分数
mysql> select classid,max(score) from tableName group by classid;
+---------+------------+
| classid | max(score) |
+---------+------------+
| 1 | 99 |
| 2 | 90 |
+---------+------------+
2 rows in set (0.00 sec)
-- 查询分数、班级、名称、个人id
mysql> select id,name,classid,max(score) from tableName as t WHERE NOT EXISTS (SELECT 1 FROM tableName WHERE classid = t.classid AND score > t.score) group by classid;
+------+------+---------+------------+
| id | name | classid | max(score) |
+------+------+---------+------------+
| 1 | a | 1 | 99 |
| 5 | e | 2 | 90 |
+------+------+---------+------------+
2 rows in set (0.00 sec)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
求 sql 每个班中成绩最好的_百度知道 (opens new window)
- 特殊用法
select 1
比如说,使用select 1 from table
的结果是临时得到 1 列(列的值为 1),其行数为表的记录数(行数),如果配合 exists 语句则可以快速查询结果是否存在,而结果的具体数据不涉及到。
就像我上述提供的例子,它只查询验证 dept 表的字段 deptno 和 emp 的字段 deptno 是否有相等的情况,并且 loc=‘NEW YORK’,而不需要知道 dept 表和 emp 表哪些记录存在那样的情况,也不需要知道相等情况下其他字段的值。在应用中,效率比
扩展: select *
快。select 1 from table;
与select anycol(目的表集合中的任意一行) from table;
与select * from table
从作用上来说是没有差别的,都是查看是否有记录,一般是作条件查询用的。select 1 from
中的 1 是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>anycol>*
,因为不用查字典表。
select 1 from ... sql 语句中的 1 代表什么意思?_lili 小虫子的博客-CSDN 博客 (opens new window)
警告
关于上述说法只在低版本中存在,在高版本中并不存在效率更高的问题。
# 查询总分最高的学生
-- 查询单科成绩前十:
select * from student order by subject desc limit 10;
-- 查询总分成绩前十:
select sum(subject) subject,name from student group by name order by subject desc limit 10;
2
3
4
5
# 指令
连续创建目录
mkdir -p aa/bb/cc
查询日志特定时间内条数
# 查询日志
[root@slave ~]# grep '2021-03-24 14:30:[00-59]' /var/log/ODSP.log
2021-03-24 14:30:00 threadclass-HAFailcountClearThread-hastatus [line:1896]: True
2021-03-24 14:30:05 threadclass [line:183]: net-get 0
2021-03-24 14:30:09 threadclass-nodeip [line:1337]: rsyncstatus=True;managestatus=True
2021-03-24 14:30:15 threadclass [line:183]: net-get 0
2021-03-24 14:30:19 threadclass-nodeip [line:1337]: rsyncstatus=True;managestatus=True
2021-03-24 14:30:24 threadclass-ntp-master-local [line:1268]: slave slave
2021-03-24 14:30:26 threadclass [line:183]: net-get 0
2021-03-24 14:30:30 threadclass-nodeip [line:1337]: rsyncstatus=True;managestatus=True
2021-03-24 14:30:32 threadclass-HAFailcountClearThread-hastatus [line:1896]: True
2021-03-24 14:30:36 threadclass [line:183]: net-get 0
2021-03-24 14:30:41 threadclass-nodeip [line:1337]: rsyncstatus=True;managestatus=True
2021-03-24 14:30:47 threadclass [line:183]: net-get 0
2021-03-24 14:30:51 threadclass-nodeip [line:1337]: rsyncstatus=True;managestatus=True
2021-03-24 14:30:58 threadclass [line:183]: net-get 0
# 记录条数统计
[root@slave ~]# grep '2021-03-24 14:30:[00-59]' /var/log/ODSP.log |wc -l
14
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-o
模糊匹配,-wo
精准匹配
# nginx 和 wsgi 区别
nginx: 反向代理、负责均衡 uwsgi: 实现 Python 程序的 WSGI 协议,接受客户端请求,转发响应的程序。
# web 应用如何利用多核服务器提高 cpu 使用率
uwsgi/gunicorn 线程池、进程池
谈谈如何提高 web 服务器并发性能 | EZLippi-浮生志 (opens new window)
# for 循环实现幂运算
# 幂运算
def cal_mi(x, y):
if y == 0:
return 1
for _ in range(y - 1):
x += x
return x
print(cal_mi(2, 5)) # 32
def ano_cal_mi(x, y):
if y == 0:
return 1
n = 1
for _ in range(y):
n *= x
return n
print(ano_cal_mi(2,10)) # 1024
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 累加
def cal_multi_add(x, y):
n = 0
for i in range(y):
n += x
return n
print(cal_multi_add(2, 2)) # 4
2
3
4
5
6
7
8
9
# 塞宁网安
# Flask 工作原理
# redis 使用
# celery 工作原理
Celery 是一种分布式任务队列系统,它通过消息传递来实现任务的分发和执行。
工作原理如下:
- Celery 系统由三个主要组件组成:消息代理,任务队列和工作者。
- 消息代理是一个中间件,用于传递任务消息。常用的消息代理包括 RabbitMQ、Redis 和 Amazon SQS 等。
- 任务队列是一个存储任务消息的地方。当任务被提交时,它会被放入任务队列中等待执行。
- 工作者是负责执行任务的进程或线程。它们从任务队列中获取任务消息,并根据任务的要求执行任务。
- 当任务执行完成后,工作者将执行结果返回给消息代理,然后消息代理将结果传递给任务的发起者。
Celery 的工作流程如下:
- 任务发起者将任务提交给 Celery 系统。
- Celery 系统将任务消息发送给消息代理。
- 消息代理将任务消息存储在任务队列中。
- 工作者从任务队列中获取任务消息。
- 工作者执行任务,并将执行结果返回给消息代理。
- 消息代理将执行结果发送给任务发起者。
Celery 的优点是它可以实现任务的异步执行和分布式处理,提高了系统的可扩展性和性能。同时,它还提供了灵活的任务调度和监控机制,使得任务的管理和追踪变得更加方便。
参阅:celery 工作原理
- Python celery 原理及运行流程解析 - 云+社区 - 腾讯云 (opens new window)
- celery 工作原理介绍 - 迎风而来 - 博客园 (opens new window)
# flask-sqlachemy 中的外键如何设置
foreigin_key, relationship + backref
# TCP 粘包问题
time.sleep()/ 消息头添加标志字段
# POST、PUT 和 PATCH 区别
推荐使用 POST
来创建资源,使用 PUT
来更新资源。
PUT
方法是幂等的。对同一资源的多次PUT
操作,不应该返回不同的资源,而对同一资源的多次POST
可以生产多个资源。
当你可以通过一个特定资源来对其做完整更新时使用PUT
,当需要局部更新时,使用PATCH
# 数据库替换
-- 更新数据库字段: '2021-6-21周' -> '20210621'
update product_strategy_level_score
set weeks=date_format(replace(weeks, '周', ''), '%Y%m%d')
2
3
4
其中date_format(replace (xxx,'周',''),'%Y%m%d')
首先把"周"替换,然后使用date_format
函数转换为年月日类型的数据。