前言
主要是一些专业术语,概念的解读,还有小知识
1. 目前最主流的三个Web服务器是Apache、Nginx、IIS。
2. powershell和cmd区别:1、CMD写的BAT脚本我们看作是面向过程的,而PowerShell则是面向对象的,是一种站在使用者的角度进行脚本的编写;2、CMD只能执行基本的任务,PowerShell因为是基于【.NET】面向对象的。
3. 启用跨域请求
4. >什么是“同一源”?
如果两个 URL 具有相同的方案、主机和端口,则其源相同。 (RFC 6454)
这两个 URL 同源:
http://example.com/foo.html
http://example.com/bar.html
这些 URL 的源与前两个 URL 不同:
http://example.net - 不同的域
http://example.com:9000/foo.html - 不同的端口
https://example.com/foo.html - 不同的方案
http://www.example.com/foo.html - 不同的子域
比较源时,Internet Explorer 不会考虑端口。
5. HTTP 与 HTTPS 区别 (默认端口前者是80,后者是443 )
https://www.runoob.com/w3cnote/http-vs-https.html
6. 文言文(单片机)和现代白话文(PLC),你就懂了,那个很有前途
7. heap和stack区别
1、heap是堆,stack是栈;2、stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的;3、stack空间有限,heap的空间是很大的自由区。
8. MSDN是微软提供给广大程序员的开发大全
一、数据库
//CRUD是什么
CRUD是增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。
CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能。
//什么是触发器
触发器是与表有关的数据库对象,可以在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句。
二、其他
github,gitlab,gitee的区别
- github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
- gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境。
- gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
第一,github针对企业要收费,那当然是不同意,毕竟都想节约资金,那就还能使用gitee,或者gitlab了。
第二,但是码云虽然是免费的,而且不用自己搭环境,但是企业中把项目放在别人的服务器上,始终没有安全感。
第三,因此,衍生出了gitlab,就是用于企业搭私服,而且还是在自己的服务器上。
RBAC权限模式
PowerShell
$PSVersionTable //显示相关 PowerShell 版本信息的哈希表:
Get-ExecutionPolicy //执行策略
Get-Help //获得帮助
三、.NET 面试总结
1.鉴权和授权
鉴权(Authenticiton)或身份验证是确定用户身份的过程。 (用户登录过程)
授权Authorization)是确定用户是否有权访问资源的过程。(是否允许对某些数据的更改)
2. 线程和进程的区别
最根本区别:进程是操作系统资源分配的基本单位,而线程是 CPU 调度和执行的基本单位。
3. get post请求区别
- GET和POST是HTTP协议中的两种发送请求的。
- get是从服务器上获取数据(查询数据),post是向服务器传送数据(数据添加、修改、删除)。
- get请求把参数放在url上,post请求则是把请求参数放在request body 里面
- 4.安全性 post请求相对来说会比get请求安全
- 3.缓存性 get请求可以缓存 post请求无法缓存
误区:get请求url有长度限制?
原则长,get请求和post请求本质都是tcp链接,http本身是没有对get请求url的长度进行限制,一般是web浏览器会对url的长度有所限制,浏览器通常都会限制url长度在2K个字节
4. winform中构造函数与Form_Load
构造函数的作用
构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用它的构造函数。一般来说, 构造函数有以下三个方面的作用:
■ 给创建的对象建立一个标识符;
■ 为对象数据成员开辟内存空间;
■ 完成对象数据成员的初始化。
https://blog.csdn.net/qq_48705696/article/details/115946325
5. EF中的上下文(DbContext)简介
DbContext是实体类和数据库之间的桥梁, DbContext主要负责与数据交互,主要作用:
1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。
2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。
4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。
## 简单的
1. 什么是委托,事件是么?、什么是装箱和拆箱 、什么是重载?
> 委托是可以吧一个方法作为参数代入另一个方法,理解为指向一个方法的引用。是,是一种特殊的委托。
> 装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型 ;如 int a=2;object b=a;这个就是装箱。相反的;是拆箱。
> 重载就是指一个方法名相同,参数个数不相同,返回值可以相同的方法。
>
2. net core用啥关键字注入服务、orm和ef的区别(数据库访问技术)、什么是同步跟异步
> AddScoped:同一个Scoped只创建一个实例;AddTransient:每次请求都获得一个实例AddSingleton:每次获取同一个实例.
> ORM是一种思想,而EF是实现这种思想的一种框架。将表实体的变化,通过ORM框架映射到数据库表的变化。即在代码中所添加的实体,可以通过EF框架映射到数据库表中
> 同步:同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这个方法给他回复, 否则他不往下执行(死心眼)。异步:异步在一定程度上可以看做是多线程的(废话,一个线程怎么叫异步),请求一个方法后, 就不管了,继续执行其他的方法。
>
3. 概述三层结构体系、如何读取静态文件、wwwroot文件夹内包含、对.NET Core kestrel的理解?
> 表示层(UI),业务逻辑层(BLL),数据访问层(DAL).
> 可以通过中间件UseStaticFiles来配置读取静态文件.
> 包含了css、js、js库、字体文件.
> Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。 Kestrel 是包含在 ASP.NET Core 项目模板中的 Web 服务器,默认处于启用状态。
>
4. string str1=null和string str2=""区别
> 也就是null没有分配空间,""分配了空间为空字符串的内存空间,因此str1还不是一个实例化的对象,而str2已经实例化。eg:老板把你招进公司但是不发工资和给你张工资卡里面一分钱都没有的区别
>
5. Core WebApi的Swagger 、RESTful是什么、是么是GC?
> Swagger是一个Api说明文档,支持Api测试;
> restful其实就是一套编写api接口的设计风格和开发方式,规定如何编写以及如何设置返回值、状态码等信息。GET、POST、PUT、DELETE
> 是垃圾回收器。程序员不用担心内存管理,因为gc会自动进行管理。
>
6. 当遇到问题,你是如何解决的
答:百度、技术文档、博客、B站视频、同事、github源码
## 复杂的
1. 列举ADO.NET中的五个主要对象,并简单描述
ADO.NET就是一种数据访问接口,可以让我们在程序中调用相应的类库对数据库(通常为SQL Server,也可以是access 等其他数据库)进行增删改查等操作。
答:Connection连接对象,Command执行命令和存储过程,DataReader向前只读的数据流,DataAdapter适配器,支持增删查询,DataSet数据级对象,相当与内存里的一张或多张表。
2. .net core 的优点
- vs这个ide 对于我们的开发十分便捷;
- linq 的使用十分方便
- 是依赖注入。
- 可以使用命令行创建应用
- 更好的支持异步编程
- 许多nuget包可供使用
3. _Viewstart.cshtml的作用
1、_Viewstart.cshtml是一个在呈现View文件的时候的启动文件,会在所有View(.cshtml)被执行之前执行,主要用于一些不方便或不能在母版(_Layout.cshtml)中进行的统一操作,譬如你有很多个没有继承关系的母版或不使用母版的单页。
3、注意,是在View被呈现的时候才会调用_Viewstart.cshtml,如果一个View是按照PartialView的方式输出的,则不会触发_Viewstart.cshtml中的代码。
4、如果在View的某个目录下(例如Home目录)也有一个同名的_ViewStart.cshtml文件,那么这个_ViewStart也会被调用,但是最先调用的还是最外面的_ViewStart,然后再是Home目录下的_ViewStart。
4. 鉴权授权技术
1.传统的授权技术:通过Session、Cookie完成授权;实现特点: 让无状态的http请求,变的有状态,让第一次请求和第二次请求之间产生联系,第一次请求进入服务器,在服务器写入一组session,然后返回sessionId给客户端存在Cookie,第二次请求,从cookie中取到SessionId,传递给服务器,服务器鉴别SessionId,如果是上一次来的SessionId,就认为之前来请求过;就认为有权限;
2.流行鉴权授权方式:Token授权,在Core WebApi中主要就是JWT和IdentityServer4;授权后颁发token,然后客户端带着token去请求Api,Api方验证Token,验证通过就有权限,验证不通过就没有权限;
5. 请问对gRPC有了解吗,说说gRPC。
有了解,说gRPC可以先说RPC,PRC:所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。
所谓gRPC 是由谷歌开发的一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python,Ruby, Objective-C, PHP 和 C# 支持.
6. SaveChanges的理解、说说对EFCore中EntityState的理解
> SaveChanges是以Context为维度的一次提交,对于数据库操作的一切动作,只要是在同一个Context eg,所有的操作,在调用SaveChanges方法后,统一体现到数据库中去;
因为EFCore对于数据库的所有操作都是通过上下文DbContext来完成的,且是通过SaveChanges方法统
一落实到数据库中去的;EntityState是EFCore 在对数据库操作增删改的时候,记录当前被操作的数据对
象和Context的关系,针对与不同的操作,对应的一个状态信息,一共五种状态;一共五种:
Detached = 0, 当前对象和context没有任何关系,没有被上下文跟踪
Unchanged=1, 当前对象被context跟踪,数据没有做任何修改
Deleted=2, 当前对象被context跟踪,且标记是数据删除,调用SaveChanges后将会从数据中删除;
Modified=3,当前对象被context跟踪且有属性数据被修改过调用SaveChanges后将会从数据中修改;
Added=4 当前对象被context跟踪,且数据并没有存在数据库中,调用SaveChanges后将会新增
7. C#中的接口和抽象类有什么异同、简述 private、protected、internal 、public 修饰符的访问权限。
> 相同点:都不能实例化,需要子类实现其抽象成员。不同点: 1.抽象类可以包含已实现的成员,二接口不能。2.抽象类可以继承接口也可以继承类,而接口只能继承接口
> private:私有类型,在类的内部才可以访问。 protected:保护成员,该类内部和继承类中可以访问。internal:在同一程序集内可以访问。public: 没有访问限制。
>
8. 语言集成查询(LINQ) 是什么?
> 例如,SQL是一种结构化查询语言,用于保存和检索数据库中的数据。同样,LINQ是C#和VB.NET中内置的结构化查询语法,(使用一些方法和箭头函数。)
>
1. 有数据源 2.LING查询 3.查询执行。
9. 什么是IdentityServer4、什么是JWT
官方解释:IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现。
通俗来讲,就是服务端对需要认证授权的资源(客户端请求资源)在外层使用IdentityServer4框架进行封装加壳,用户只能通过获取IdentityServer4颁发的Token令牌才能进行资源访问。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
全称为JSON web token,是一个json对象,用于系统间身份验证。主要包括三部分组成
四、数据库的面试总结(Mysql)
复习
1. 什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
2. like 模糊查询
like 匹配/模糊匹配,会与 % 和 _ 结合使用。
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
3. aggrate:
MIN 最小值
MAX 最大值
SUM 求和
AVG 求平均
COUNT 计数
limit 限制
DISTINCT: 可选,删除结果集中重复的数据
ALL: 可选,返回所有结果集,包含重复数据。
4. UNION 操作符(行数要求一致)
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
5. 排序和分组。
SELECT * from runoob_tbl ORDER BY submission_date DESC;
SELECT name ,count(name) as 数量 FROM `role` GROUP BY name order by name desc
6. 连接的使用(默认是内连接,INNER 使用 JOIN)
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
7. NULL 值处理
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
8. Trigger触发器
//触发器是与表有关的数据库对象,可以在insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性 、日志记录 、数据校验等操作 。使用别名 NEW 和 OLD 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
9. 正则表达式regexp
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查找name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
10. mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查找name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
11. 事务 主要用于处理操作量大,复杂度高的数据。
你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
事务控制语句
- BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
12. 删除,添加或修改表字段 使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT;
ALTER TABLE tmp RENAME TO person_tbl;
13. GROUP BY子句之后使用Having子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。因此,在GROUP BY子句后面包含了一个HAVING子句。HAVING类似于WHERE(唯一的差别是WHERE过滤行,HAVING过滤组)AVING支持所有WHERE操作符。
//查找雇员数超过2个的部门的最高和最低薪水:
SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
14. MySQL 索引 https://www.runoob.com/mysql/mysql-index.html
15. MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
16. MySQL 复制表
17. MySQL 导出数据
MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。
SELECT * FROM role INTO OUTFILE 'E:/Desktop/runoob.txt'
18. SQL语言的分类
数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
1. 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
2. 数据操纵语言DML
数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE
3. 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
| | | | |
表 视图 索引 同义词 簇
DDL操作是隐性提交的!不能rollback
4. 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
技巧
1. 什么是数据库读写分离
数据库的读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主(master)数据库提供写操作,从(slave)数据库提供读操作,其实在很多系统中,主要是读的操作。当主(master)数据库进行写操作时,数据要同步到从(slave)的数据库,这样才能有效保证数据库完整性。主(master)数据库同步到从(slave)数据库,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。这里还要注意处理好负载均衡。
https://blog.csdn.net/qq_39478853/article/details/80623612
可以减少数据库压力,提高性能。x
2. 索引的含义,
答:索引加快查询速度,但会降低写入速度;
3. 数据库语法
10、说明:几个简单的基本的sql语句
选择:select * fromtable1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1where 范围
更新:update table1 set field1=value1 where 范围
查找:select* from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:selectcount as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:selectavg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:selectmin(field1) as minvalue from table1