12.SQL exists 运算符
作用:
- EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
语法:
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
演示:
1)查找总访问量(count 字段)大于 200 的网站是否存在。
第二章 SQL高级
1.SQL select top ,limit ,rownum 子句
作用:
- select top子句用于规定要返回的记录的数目。
- select top 子句对于拥有数千条记录的大型表来说,是非常有用的。
**注意:并非所有的数据库系统都支持 select top语句。 MySQL 支持 limit语句来选取指定的条数数据, Oracle 可以使用 rownum来选取。
语法:
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s)
FROM table_name;
Mysql语法
SELECT column_name(s)
FROM table_name
LIMIT number;
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
演示:
1)从 “Websites” 表中选取头两条记录:
2.SQL like 操作符
作用:
- like操作符用于在 where子句中搜索列中的指定模式。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
演示:
1)从websites表中选取 name 以字母 “G” 开始的所有客户
2)从websites表中选取 name 包含模式 “oo” 的所有客户
3)从websites表中选取 name 不包含模式 “oo” 的所有客户
3.SQL 通配符
作用:
- 通配符可用于替代字符串中的任何其他字符。
- 在 sql中,通配符与 sql like 操作符一起使用。
- sql 通配符用于搜索表中的数据。
- 在 SQL 中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或 [!charlist] | 不在字符列中的任何单一字符 |
演示:
1) websites表中选取 url 以字母 “https” 开始的所有网站:
4.SQL in 操作符
作用:
- in 操作符允许您在 WHERE 子句中规定多个值。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
演示:
1)websites表中选取 name 为 “Google” 或 “菜鸟教程” 的所有网站:
5.SQL between 操作符
作用:
- between操作符用于选取介于两个值之间的数据范围内的值。
- 这些值可以是数值、文本或者日期。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
演示:
1)websites表中选取 alexa 介于 1 和 20 之间的所有网站:
2)websites表中选取 alexa 不在介于 1 和 20 之间的所有网站:
6.SQL 别名(as)
作用:
- as 可以为表名称或列名称指定别名。
- 基本上,创建别名是为了让列名称的可读性更强。
语法:
--列的sql别名语法
SELECT column_name AS alias_name
FROM table_name;
--表的sql别名语法
SELECT column_name(s)
FROM table_name AS alias_name;
演示:
1)使用 “Websites” 和 “access_log” 表,并分别为它们指定表别名 “w” 和 “a”,选取 “淘宝” 的所有访问记录:
7.SQL join 链接
作用:
- SQL join 用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
- 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
不同的sql join:
- INNER JOIN:如果表中有至少一个匹配,则返回行。
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行。
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行。
- FULL JOIN:只要其中一个表中存在匹配,则返回行。
1)inner join
语法:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
--或
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
演示:
1)返回所有网站的访问记录:
2)sql left join
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
--或
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
演示:
1)返回所有网站及他们的访问量(如果有的话):
3)sql right join
语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
--或
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
演示:
1)返回网站的访问记录:
4)sql full outer join
语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
8.SQL union 操作符
作用:
- union 操作符合并两个或多个 SELECT 语句的结果。
- union内部的每个 select语句必须拥有相同数量的列。
- 列也必须拥有相似的数据类型。
- 同时,每个 select 语句中的列的顺序必须相同。
- union结果集中的列名总是等于 union中第一个select 语句中的列名。
语法:
---sql union ---选取不同的值
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
---sql union all---允许重复的值
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
演示:
1)从 “Websites” 和 “apps” 表中选取所有不同的country(只有不同的值)
2)从 “Websites” 和 “apps” 表中选取所有的country(也有重复的值)
9.SQL select into 语句
作用:
- select into语句从一个表复制数据,然后把数据插入到另一个新表中。
语法:
---复制所有的列插入到新表中:
SELECT *
INTO newtable [IN externaldb]
FROM table1;
---只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
实例:
--创建 Websites 的备份复件:
SELECT *
INTO WebsitesBackup2016
FROM Websites;
--只复制一些列插入到新表中:
SELECT name, url
INTO WebsitesBackup2016
FROM Websites;
--只复制中国的网站插入到新表中:
SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';
--复制多个表中的数据插入到新表中:
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
10.SQL insert into select
作用:
- insert into select 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
语法:
--一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
--我们可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
演示:
1)复制 “apps” 中的数据插入到 “Websites” 中:
11.SQL create database 语句
作用:
- create database 语句用于创建数据库。
语法:
CREATE DATABASE dbname;
实例:
CREATE DATABASE my_db;
12.SQL create table 语句
作用:
- create table语句用于创建数据库中的表。
- 表由行和列组成,每个表都必须有个表名。
语法:
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
实例:
--创建一个名为 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
13.SQL 约束
作用:
- SQL 约束用于规定表中的数据规则。
- 如果存在违反约束的数据行为,行为会被约束终止。
- 约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
语法:
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
在 SQL 中,我们有如下约束:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
1)not null 约束
作用:
- NOT NULL 约束强制列不接受 NULL 值。
- NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
实例:
1)创建表时添加not null约束:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
2)已创建的表添加not null 约束
ALTER TABLE Persons
MODIFY Age int NOT NULL;
3)已创建的表中删除not null约束
ALTER TABLE Persons
MODIFY Age int NULL;
2)unique 约束
作用:
- UNIQUE 约束唯一标识数据库表中的每条记录。
- UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
- PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
- 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
实例:
1)创建表时添加unique约束:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
2)已创建的表添加unique约束
ALTER TABLE Persons
ADD UNIQUE (P_Id)
3)已创建的表中删除unique约束
ALTER TABLE Persons
DROP INDEX uc_PersonID
3)primary key 约束
作用:
- PRIMARY KEY 约束唯一标识数据库表中的每条记录。
- 主键必须包含唯一的值。
- 主键列不能包含 NULL 值。
- 每个表都应该有一个主键,并且每个表只能有一个主键。
实例:
1)创建表时添加primary key 约束:
--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
2)已创建的表添加primary key 约束
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
3)已创建的表中删除primary key 约束
ALTER TABLE Persons
DROP PRIMARY KEY
4)foreign key 约束
作用:
- 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
- FOREIGN KEY 约束用于预防破坏表之间连接的行为。
- FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
实例:
“Persons” 表:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
“Orders” 表:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
- “Orders” 表中的 “P_Id” 列指向 “Persons” 表中的 “P_Id” 列。
- “Persons” 表中的 “P_Id” 列是 “Persons” 表中的 PRIMARY KEY。
- “Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。
1)创建表时添加foreign key 约束:
--mysql
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
2)已创建的表添加foreign key 约束
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
3)已创建的表中删除foreign key 约束
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
5)check 约束
作用:
- CHECK 约束用于限制列中的值的范围。
- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
- 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
实例:
1)创建表时添加check 约束:
--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
2)已创建的表添加check 约束
ALTER TABLE Persons
ADD CHECK (P_Id>0)
3)已创建的表中删除check 约束
ALTER TABLE Persons
DROP CHECK chk_Person
6)default 约束
作用:
- DEFAULT 约束用于向列中插入默认值。
- 如果没有规定其他的值,那么会将默认值添加到所有的新记录。
实例:
1)创建表时添加default 约束:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
2)已创建的表添加default 约束
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
3)已创建的表中删除default 约束
ALTER TABLE Persons
ALTER City DROP DEFAULT
14.create index 语句
作用:
- CREATE INDEX 语句用于在表中创建索引。
- 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
- 可以在表中创建索引,以便更加快速高效地查询数据。
- 用户无法看到索引,它们只能被用来加速搜索/查询。
语法:
--在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
--在表上创建一个唯一的索引。不允许使用重复的值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
实例:
1)在 “Persons” 表的 “LastName” 列上创建一个名为 “PIndex” 的索引:
CREATE INDEX PIndex
ON Persons (LastName)
2)如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)
15.SQL drop
作用:
- 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
语法:
-----DROP INDEX 语句用于删除表中的索引。
--MS Access
DROP INDEX index_name ON table_name
--DB2/Oracle
DROP INDEX index_name
-- MS SQL Server
DROP INDEX table_name.index_name
--MySQL
ALTER TABLE table_name DROP INDEX index_name
----DROP TABLE 语句用于删除表。
DROP TABLE table_name
----DROP DATABASE 语句用于删除数据库。
--DROP DATABASE database_name
----只删除表中的数据,不删除表本身
TRUNCATE TABLE table_name
16.SQL alter table 语句
作用:
- ALTER TABLE 语句用于在已有的表中添加、删除或修改列
语法:
--在表中添加列
ALTER TABLE table_name
ADD column_name datatype
--删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name
--改变表中列的数据类型
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
17.SQL auto increment 字段
作用:
- Auto-increment 会在新记录插入表中时生成一个唯一的数字。
- 通常希望在每次插入新记录时,自动地创建主键字段的值
语法:
--MySQL
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
--SQL Server
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Access
CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Oracle
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
18.SQL 视图
作用:
- 视图是基于 SQL 语句的结果集的可视化的表。
- 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
- 以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
---注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
实例:
1)视图 “Current Product List” 会从 “Products” 表列出所有正在使用的产品(未停产的产品)。
--创建视图
CREATE VIEW [Current Product List] AS
SELECT ProductsID,ProductName
FROM Products
WHERE Discontinued=No
---查询视图
SELECT * FROM [Current Product List]
2)更新视图:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
3)删除视图
DROP VIEW view_name
19.SQL null值
作用:
- NULL 值代表遗漏的未知数据。
- 默认地,表的列可以存放 NULL 值。
- 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
- NULL 值的处理方式与其他值不同。
- NULL 用作未知的或不适用的值的占位符。
- 无法比较 NULL 和 0;它们是不等价的。
如何测试 NULL 值
- 无法使用比较运算符来测试 NULL 值,比如 =、< 或 <>。
- 必须使用 IS NULL 和 IS NOT NULL 操作符来测试null
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**
[外链图片转存中…(img-4xfnhtEN-1712348628843)]
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算