服务器文档下载zip格式
刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚。开始吧。(MVC的)
@using Rattan.Core.Utility;
@{
string ButtonScript = string.Empty;
}
@if (Rattan.Basic.Globals.GetIsAuth(ViewBag.AuthValues, "QuickExport"))
{
ButtonScript = @"
{
position: 0,
id: 'btnQuickExport',
text: '导出稿件附件',
disabled: false,
icon: 'pwd.gif',
handler: function ()
{
QuickExport();
}
}";
}
<script type="text/javascript" language="javascript">
helper.onBeforePageLoad = function (params) {
}
helper.onAfterPageLoad = function () {
m_grid.insertToolBar(
[
@Html.Raw(ButtonScript)
]);
}
</script>
<script type="text/javascript" language="javascript">
function QuickExport() {
// var rows = m_grid.getSelections(); ---这个是不打包,一个个跳出来的,没卵用,当时应付的
// $.each(rows, function (i, row) {
// var url = row.filelist + "?" + Math.random();
// window.setTimeout(function () {
// window.open(url, "_blank");
// }, 1000);
// });
var rows = m_grid.getSelections();
var Draft_Id_Array = [];
$.each(rows, function (i, row) {
Draft_Id_Array.push(row.Draft_Id);
});
if (!Draft_Id_Array.length) {
alert("至少选中一行!");
return;
}
var url = "/BasicInfo/Meeting_Draft/ZipFileByCode";
var postParams = {
Draft_Ids: Draft_Id_Array.join(',')
};
window.open(url + '?Draft_Ids=' + Draft_Id_Array.join(','))
}
</script>
/// <summary>
/// 压缩打包文件
/// </summary>
public ActionResult ZipFileByCode(string Draft_Ids)//string Draft_Id
{
MemoryStream ms = new MemoryStream();
byte[] buffer = null;
using (ZipFile file = ZipFile.Create(ms)) //压缩包创建到内存
{
file.BeginUpdate();
file.NameTransform = new IndexController();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
string where = "Draft_Id in (" + Draft_Ids + ")";
var draftInfo = Meeting_DraftRepository.Instance.GetMany(where).ToList();
foreach (var draftInfoList in draftInfo)
{
if (string.IsNullOrWhiteSpace(draftInfoList.filelist) || draftInfoList.filelist.IndexOf('/') < 0)
{
continue;
}
var positonIndex = draftInfoList.filelist.LastIndexOf('/');
string fileName = draftInfoList.filelist.Substring(positonIndex, draftInfoList.filelist.Length - positonIndex);//客户端保存的文件名
file.Add(Server.MapPath(draftInfoList.filelist));
}
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, buffer.Length);
}
//将中文转换预防出现乱码
string excelName = "稿件附件".ToString();
excelName = HttpUtility.UrlEncode(excelName, System.Text.Encoding.UTF8);
DateTime dt = DateTime.Now;
Response.AddHeader("content-disposition", "attachment;filename=" + excelName + DateTime.Now.ToString("yyyyMMdd")+ ".zip");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
return View();
}
}
SQL Server SQL分页查询
SQL Server SQL分页查询的几种方式
目录
- 0.序言
总结一下SQL Server种常用的几种分页查询:
本示例中用的时已有的表,建表不规范,Name作为主键,建议实际使用中专门设置主键并且WHERE条件中尽可能使用主键。
参数说明:
@pageSize:分页查询每页N条数据时每页期望的数据量N
@offset:分页查询第I页每页N条数据时,第I页之前的N*(I-1)条数据
举个栗子:假如我们要查询第3页的数据,每页10条数据,则 @pageSize为10,@offset为20。
基本原理:查询 @pageSize 条数据,先使用一个子查询查询出符合查询条件的 @offset条数据的主键,再使用TOP @pageSize查询@pageSize条数据,并且再WHERE从句中使用 NOT IN 关键词来对数据进行筛选。
基本原理:在SQL Server2005之后加入,可以使用 ROW_NUMBER()函数为查询出来的记录生成一个行号,需要指定一个ORDER BY 子句确定排序方式,排序方式不同,行号也可能不同。详细说明:ROW_NUMBER()
本文只涉及OVER从句中跟随ORDER BY子句,partition by 从句不在本文讨论范围内,partition by 和OVER详细说明戳这里
这里使用了两个ROW_NUMBER()函数的例子,这两个计算总行数的方式是不一样的,本文结尾处会对比一个两种方式的IO操作以说明哪种方式更适合
OFFSET是SQL Server 2012中新增的语法,可以单独使用,也可与FETCH NEXT一起使用,单独使用OFFSET时是查询获取@offset之后所有的数据,如下图所示
但我们想要的是分页查询,那就需要和FETCH NEXT联合使用,OFFSET后跟@offset参数,FETCH NEXT 后跟 @pageSize参数
4.执行计划
上面四种查询方式的执行计划如下:
OFFSET…FETCH补充:
关于参数,推荐用法:始终使用ROWS,始终使用NEXT
-- OFFSET {@offset} ROWS FETCH NEXT {@pagesize} ROWS ONLY
/*
*使用 OFFSET-FETCH 中的限制:
*** ORDER BY 是使用 OFFSET 和 FETCH 子句所必需的。
*** OFFSET 子句必须与 FETCH 一起使用。永远不能使用 ORDER BY … FETCH。
*** TOP 不能在同一个查询表达式中与 OFFSET 和 FETCH 一起使用。
*** OFFSET/FETCH 行计数表达式可以是将返回整数值的任何算术、常量或参数表达式。该行计数表达式不支持标量子查询。
*/
更多OFFSET信息参考这里
对比一下ROW_NUMBER()两种计算数据总数方式的IO消耗:
第一个是使用MAX(RowNum)来计算总数的,第二种是使用子查询的方式来计算总数。
C#过滤html标签
C#过滤html标签
在项目中遇到这样一个需求,需要将一段html转换为一般文本返回,万能的正则表达式来了。
正则表达式来拯救你,代码如下:
1 public static string Html2Text(string htmlStr) 2 3 { 4 5 if (String.IsNullOrEmpty(htmlStr)) 6 7 { 8 9 return ""; 10 11 } 12 13 string regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式 14 15 string regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式 16 17 string regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式 18 19 htmlStr = Regex.Replace(htmlStr, regEx_style, "");//删除css 20 21 htmlStr = Regex.Replace(htmlStr, regEx_script, "");//删除js 22 23 htmlStr = Regex.Replace(htmlStr, regEx_html, "");//删除html标记 24 25 htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", "");//去除tab、空格、空行 26 27 htmlStr = htmlStr.Replace(" ", ""); 28 29 htmlStr = htmlStr.Replace(""", "");//去除异常的引号" " " 30 31 htmlStr = htmlStr.Replace(""", ""); 32 33 return htmlStr.Trim(); 34 35 }
SQL Server 分页编号的另一种方式
SQL Server 分页编号的另一种方式
今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度。
sql及相关的结果如下,数据库中的数据有5W+。
ROW_NUMBER():
SET STATISTICS TIME ON SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id FROM dbo.T_MyCourse
运行结果
UNBOUNDED PRECEDING
SET STATISTICS TIME ON SELECT SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id FROM dbo.T_MyCourse
运行结果
通过运行之后,看到结果,使用微软官方提供的方法进行编号排序,速度明显的提高。
不过我使用上述方法进行分页获取数据的时候结果又有点不一样。
分页获取数据:
ROW_NUMBER() 分页获取数据:
SET STATISTICS TIME ON SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id FROM dbo.T_MyCourse )a WHERE a.rn BETWEEN 55 AND 444
执行sql命令:DBCC DROPCLEANBUFFERS ,清除数据库缓存后的结果
UNBOUNDED分页获取数据:
SET STATISTICS TIME ON SELECT * FROM ( SELECT SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id FROM dbo.T_MyCourse )a WHERE a.rn BETWEEN 22 AND 444
UNBOUNDED这个方式下执行了DBCC DROPCLEANBUFFERS 清除缓存的sql也没有用,执行时间没有变化。
通过上述结果,看到ROW_NUMBER()获取分页的数据明显更快,我猜测是微软对ROW_NUMBER()这个方法做了优化,可能是有缓存,读取的缓存中的数据然后进行分页。
如果有知道的网友,请评论告诉我,让我学习学习。
EF 延时加载与死锁
第一种
#region 第一种延迟加载 用到的时候就会去查询数据。 //用到的时候就会去查询数据。 //IQueryable<UserInfo> temp = from u in dbContext.UserInfo // //where u.UName.Contains("o") // //&& u.UName.StartsWith("D") // select u; //测试一 //foreach (var userInfo in temp) //{ // Console.WriteLine(userInfo.ID + " " +userInfo.UName); //} //foreach (var userInfo in temp) //{ // Console.WriteLine(userInfo.ID + " " + userInfo.UName); //} //数据库监视发现:查询了两次。 //因为IQueryable每次用到时都会重新查询,所以查询到的数据不可作为缓存。 //测试二: linq的重用,在temp的基础上继续查询得temp2 //var temp2 = from u in temp // where u.ID > 0 // select u; //foreach (var userInfo in temp2) //{ // Console.WriteLine(userInfo.ID + " " + userInfo.UName); //} //数据库监视发现 temp和temp2一共只查询了一次,两次linq查询只生成了一条sql语句。 相当于原生ADO时期的sql脚本拼接。 #endregion
第二种
#region 第二种延迟加载
//IQueryable<UserInfo> temp = from u in dbContext.UserInfo // //where u.UName.Contains("o") // //&& u.UName.StartsWith("D") // select u; //单表多次查询
//foreach (var userInfo in temp) 交互1次 //{ // foreach (var orderInfo in userInfo.OrderInfo) 交互 100次 // { // Console.WriteLine(userInfo.UName+ " " +orderInfo.ID + " " + orderInfo.Content); // } //} //多表一次连接查询 Include("OrderInfo")
//IQueryable<UserInfo> temp = from u in dbContext.UserInfo.Include("OrderInfo") // //where u.UName.Contains("o") // //&& u.UName.StartsWith("D") // select u;
//情景1:当数据量小的时候(一般不会再页面展示所有数据,而是分页,数据量不会特别大,那么必须减少连接数据库的次数)
//若采用单表查询,若查询100个用户数据,共需与数据库交互101=1+100,交互的时间就比一次"连接查询"时间还要长。 //所以数据量较少时直接使用连接查询比价高效。
//情景2:当数据量特别大时。例如: 用户表跟订单表数据都是10000 0000条 //若采用一次连接查询:根据笛卡尔积,数据库过滤数据实际条数是10000 0000 * 10000 0000 //很可能会使数据库崩溃。 //若采单表多次查询,内存中重组数据。可以很好的解决以上问题。 //问题来了: //并发访问 多次查询,若出现并发访问怎么办? //理解并发: //在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 //在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。 //在这里访问由于锁的存在,并发问题转换成了计算能力问题,计算能力可以通过添加服务器来讲解决。 //3死锁问题: //理解死锁 //死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 //出现情况 // 表连接查询出现: 进程X占用A表,X想连接B表,必须等B表释放; 但同时y又占用了B表,y想有连接了A表,在等A表释放。 结果x、y都在等待,二A、B表同时被占用着。 // 连接的表越多,死锁问题越突出。 //解决方案: 临时表 //为什么能解决?因为此时锁定的是临时表,而原始表处于释放状态。 //临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。 //详情可百度临时表用法 #endregion
怎么看生成的sql语句的?
1)数据库里
详情可百度: SQL Server Profiler (事件追踪) 2)断点调试时查询数据后,快速监视如下。查询数据前是没有这些内容的。
致博客园
1)傻逼的150字数限制!
2)范围竟然不包括代码!
3)添加成功修改失败,似乎对修改很有意见!
在JS方法中返回多个值的三种方法(转载)
来源:https://www.cnblogs.com/gxsyj/p/6004574.html
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现:
1 使用数组的方式,如下:
<html> <head> <title>JS函数返回多个值--oec2003</title> </head> <body> <input type="button" onclick="getNames()" value="test" /> <script type="text/javascript"> function getData() { var names=new Array("oec2003","oec2004"); return names; } function getNames() { var names=getData(); alert(getData()[0]); //返回oec2003 } </script> </body> </html>
2 将数据封装到Json中返回,如下:
<html> <head> <title>JS函数返回多个值--oec2003</title> </head> <body> <input type="button" onclick="getInfo()" value="test"/> <script type="text/javascript"> function getData() { var info={"name":"oec2003","age":"25"}; return info; } function getInfo() { var info=getData(); var name=info["name"]; var age=info["age"]; alert("姓名:"+name+" 年龄:"+age); } </script> </body> </html>
3 这是最简单的一种方法,看下面代码:
<html> <head> <title>JS函数返回多个值--oec2003</title> </head> <body> <input type="button" onclick="getInfo()" value="test"/> <script type="text/javascript"> function getData() { return ["oec2003", 25] } function getInfo() { var info = getData(); alert("姓名:" + info[0] + "年龄:" + info[1]); } </script> </body> </html>
IEnumerable,ICollection,IList接口问题
最近有一个疑问:IList已经继承了ICollection<T>,而ICollection<T>继承了 IEnumerable<T>, IEnumerable,那为什么IList还要继承 IEnumerable<T>, IEnumerable?
于是我自己写了接口测试:用dnSpy反编译看到,Test3接口继承了Test1,Test2。这就说明接口其实不支持跟类一样的继承的,但是我们实际用的时候却跟类用法一样,好像支持继承,这其实是编译器帮我们补齐了接口的定义,添加上了Test1。
不吹不擂,你想要的Python面试都在这里了【315+道题】
写在前面
近日恰逢学生毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分【临近毕业每天课前用40-60分钟对之前内容回顾、提问和补充,专挑班里不爱说话就的同学回答】。
期待的是可以检验自己学习的成功;苦逼的是怎么又有东西没记住,但我们依然每天坚持一遍、一遍又一遍指导记住为止。
原本以为大家会把讲过的都记录下来,以便日后毕业复习,事实证明18岁的我还是太年轻。
一切想象的太美好,三番五次督促整理到自己笔记上,可是这群小子们就有不照干的呢。
最后同学们获胜,我还是怂了,花了一天把这些题乖乖的给大爷们整理一遍呗。。。。。。
各位大佬暂时先来315道题尝尝吧,后面有时间再继续补充。
有缘人如果看到这些题,不妨把答案写到下面,来证明下你到底有多水,哈哈哈哈哈哈哈哈哈哈哈
注意:你问答案在哪里?答案在视频里了,就是不给你写。
第一部分 Python基础篇(80题)
为什么学习Python?
通过什么途径学习的Python?
Python和Java、PHP、C、C#、C++等其他语言的对比?
简述解释型和编译型编程语言?
Python解释器种类以及特点?
位和字节的关系?
b、B、KB、MB、GB 的关系?
请至少列举5个 PEP8 规范(越多越好)。
- 通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
十进制转换成二进制:v = 18
八进制转换成十进制:v = “011”
十进制转换成八进制:v = 30
十六进制转换成十进制:v = “0x12”
十进制转换成十六进制:v = 87 -
请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ? python递归的最大层数?
- 求结果:
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1 ascii、unicode、utf-8、gbk 区别?
字节码和机器码的区别?
三元运算规则以及应用场景?
列举 Python2和Python3的区别?
用一行代码实现数值交换:
a = 1
b = 2Python3和Python2中 int 和 long的区别?
xrange和range的区别?
文件操作时:xreadlines和readlines的区别?
列举布尔值为False的常见值?
字符串、列表、元组、字典每个常用的5个方法?
lambda表达式格式以及应用场景?
pass的作用?
*arg和**kwarg作用
is和==的区别
简述Python的深浅拷贝以及应用场景?
Python垃圾回收机制?
Python的可变类型和不可变类型?
- 求结果:
v = dict.fromkeys(['k1','k2'],[])
v[‘k1’].append(666)
print(v)
v[‘k1’] = 777
print(v) - 求结果:
列举常见的内置函数?
filter、map、reduce的作用?
一行代码实现9*9乘法表
如何安装第三方模块?以及用过哪些第三方模块?
至少列举8个常用模块都有那些?
re的match和search区别?
什么是正则的贪婪匹配?
求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
def func(a,b=[]) 这种写法有什么坑?
如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
一行代码实现删除列表中重复的值 ?
如何在函数中设置一个全局变量 ?
logging模块的作用?以及应用场景?
请用代码简答实现stack 。
常用字符串格式化哪几种?
简述 生成器、迭代器、可迭代对象 以及应用场景?
用Python实现一个二分查找的函数。
谈谈你对闭包的理解?
os和sys模块的作用?
如何生成一个随机数?
如何使用python删除一个文件?
谈谈你对面向对象的理解?
Python面向对象中的继承有什么特点?
面向对象深度优先和广度优先是什么?
面向对象中super的作用?
是否使用过functools中的函数?其作用是什么?
列举面向对象中带爽下划线的特殊方法,如:__new__、__init__
如何判断是函数还是方法?
静态方法和类方法区别?
列举面向对象中的特殊成员以及应用场景
1、2、3、4、5 能组成多少个互不相同且无重复的三位数
什么是反射?以及应用场景?
metaclass作用?以及应用场景?
用尽量多的方法实现单例模式。
装饰器的写法以及应用场景。
异常处理写法以及如何主动跑出异常(应用场景)
什么是面向对象的mro
isinstance作用以及应用场景?
- 写代码并实现:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1] json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
什么是断言?应用场景?
有用过with statement吗?它的好处是什么?
使用代码实现查看列举目录下的所有文件。
简述 yield和yield from关键字。
第二部分 网络编程和并发(34题)
简述 OSI 七层协议。
什么是C/S和B/S架构?
简述 三次握手、四次挥手的流程。
什么是arp协议?
TCP和UDP的区别?
什么是局域网和广域网?
为何基于tcp协议的通信比基于udp协议的通信更可靠?
什么是socket?简述基于tcp协议的套接字通信流程。
什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
IO多路复用的作用?
什么是防火墙以及作用?
select、poll、epoll 模型的区别?
简述 进程、线程、协程的区别 以及应用场景?
GIL锁是什么鬼?
Python中如何使用线程池和进程池?
threading.local的作用?
进程之间如何进行通信?
什么是并发和并行?
进程锁和线程锁的作用?
解释什么是异步非阻塞?
路由器和交换机的区别?
什么是域名解析?
如何修改本地hosts文件?
生产者消费者模型应用场景及优势?
什么是cdn?
LVS是什么及作用?
Nginx是什么及作用?
keepalived是什么及作用?
haproxy是什么以及作用?
什么是负载均衡?
什么是rpc及应用场景?
简述 asynio模块的作用和应用场景。
简述 gevent模块的作用和应用场景。
twisted框架的使用和应用?
第三部分 数据库和缓存(46题)
列举常见的关系型数据库和非关系型都有那些?
MySQL常见数据库引擎及比较?
简述数据三大范式?
什么是事务?MySQL如何支持事务?
简述数据库设计中一对多和多对多的应用场景?
如何基于数据库实现商城商品计数器?
常见SQL(必备)
详见武沛齐博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html简述触发器、函数、视图、存储过程?
MySQL索引种类
索引在什么情况下遵循最左前缀的规则?
主键和外键的区别?
MySQL常见的函数?
列举 创建索引但是无法命中索引的8种情况。
如何开启慢日志查询?
数据库导入导出命令(结构+数据)?
数据库优化方案?
char和varchar的区别?
简述MySQL的执行计划?
在对name做了唯一索引前提下,简述以下区别:
select * from tb where name = ‘Oldboy-Wupeiqi’
select * from tb where name = ‘Oldboy-Wupeiqi’ limit 11000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?
什么是索引合并?
什么是覆盖索引?
简述数据库读写分离?
简述数据库分库分表?(水平、垂直)
redis和memcached比较?
redis中数据库默认是多少个db 及作用?
python操作redis的模块?
如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个值?
redis如何实现主从复制?以及数据同步机制?
redis中的sentinel的作用?
如何实现redis集群?
redis中默认有多少个哈希槽?
简述redis的有哪几种持久化策略及比较?
列举redis支持的过期策略。
MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。
如何基于redis实现消息队列?
如何基于redis实现发布和订阅?以及发布订阅和消息队列的区别?
什么是codis及作用?
什么是twemproxy及作用?
写代码实现redis事务操作。
redis中的watch的命令的作用?
基于redis如何实现商城商品数量计数器?
简述redis分布式锁和redlock的实现机制。
什么是一致性哈希?Python中是否有相应模块?
如何高效的找到redis中所有以oldboy开头的key?
第四部分 前端、框架和其他(155题)
谈谈你对http协议的认识。
谈谈你对websocket协议的认识。
什么是magic string ?
如何创建响应式布局?
你曾经使用过哪些前端框架?
什么是ajax请求?并使用jQuery和XMLHttpRequest对象实现一个ajax请求。
如何在前端实现轮训?
如何在前端实现长轮训?
vuex的作用?
vue中的路由的拦截器的作用?
axios的作用?
列举vue的常见指令。
简述jsonp及实现原理?
是什么cors ?
列举Http请求中常见的请求方式?
列举Http请求中的状态码?
列举Http请求中常见的请求头?
看图写结果:
看图写结果:
看图写结果:
看图写结果:
看图写结果:
看图写结果:
django、flask、tornado框架的比较?
什么是wsgi?
django请求的生命周期?
列举django的内置组件?
列举django中间件的5个方法?以及django中间件的应用场景?
简述什么是FBV和CBV?
django的request对象是在什么时候创建的?
如何给CBV的程序添加装饰器?
列举django orm 中所有的方法(QuerySet对象的所有方法)
only和defer的区别?
select_related和prefetch_related的区别?
filter和exclude的区别?
列举django orm中三种能写sql语句的方法。
django orm 中如何设置读写分离?
F和Q的作用?
values和values_list的区别?
如何使用django orm批量创建数据?
django的Form和ModeForm的作用?
django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新。
django的Model中的ForeignKey字段中的on_delete参数有什么作用?
django中csrf的实现机制?
django如何实现websocket?
基于django使用ajax发送post请求时,都可以使用哪种方法携带csrf token?
django中如何实现orm表中添加数据时创建一条日志记录。
django缓存如何设置?
django的缓存能使用redis吗?如果可以的话,如何配置?
django路由系统中name的作用?
django的模板中filter和simple_tag的区别?
django-debug-toolbar的作用?
django中如何实现单元测试?
解释orm中 db first 和 code first的含义?
django中如何根据数据库表生成model中的类?
使用orm和原生sql的优缺点?
简述MVC和MTV
django的contenttype组件的作用?
谈谈你对restfull 规范的认识?
接口的幂等性是什么意思?
什么是RPC?
Http和Https的区别?
为什么要使用django rest framework框架?
django rest framework框架中都有那些组件?
django rest framework框架中的视图都可以继承哪些类?
简述 django rest framework框架的认证流程。
django rest framework如何实现的用户访问频率控制?
Flask框架的优势?
Flask框架依赖组件?
Flask蓝图的作用?
列举使用过的Flask第三方组件?
简述Flask上下文管理流程?
Flask中的g的作用?
Flask中上下文管理主要涉及到了那些相关的类?并描述类主要作用?
为什么要Flask把Local对象中的的值stack 维护成一个列表?
Flask中多app应用是怎么完成?
在Flask中实现WebSocket需要什么组件?
wtforms组件的作用?
Flask框架默认session处理机制?
解释Flask框架中的Local对象和threading.local对象的区别?
Flask中 blinker 是什么?
SQLAlchemy中的 session和scoped_session 的区别?
SQLAlchemy如何执行原生SQL?
ORM的实现原理?
DBUtils模块的作用?
- 以下SQLAlchemy的字段是否正确?如果不正确请更正:
1234567891011
from
datetime
import
datetime
from
sqlalchemy.ext.declarative
import
declarative_base
from
sqlalchemy
import
Column, Integer, String, DateTime
Base
=
declarative_base()
class
UserInfo(Base):
__tablename__
=
'userinfo'
id
=
Column(Integer, primary_key
=
True
, autoincrement
=
True
)
name
=
Column(String(
64
), unique
=
True
)
ctime
=
Column(DateTime, default
=
datetime.now())
SQLAchemy中如何为表设置引擎和字符编码?
SQLAchemy中如何设置联合唯一索引?
简述Tornado框架的特点。
简述Tornado框架中Future对象的作用?
Tornado框架中如何编写WebSocket程序?
Tornado中静态文件是如何处理的? 如: <link href="{{static_url("commons.css")}}" rel="stylesheet" />
Tornado操作MySQL使用的模块?
Tornado操作redis使用的模块?
简述Tornado框架的适用场景?
git常见命令作用:
简述以下git中stash命令作用以及相关其他命令。
git 中 merge 和 rebase命令 的区别。
公司如何基于git做的协同开发?
如何基于git实现代码review?
git如何实现v1.0 、v2.0 等版本的管理?
什么是gitlab?
github和gitlab的区别?
如何为github上牛逼的开源项目贡献代码?
git中 .gitignore文件的作用?
什么是敏捷开发?
简述 jenkins 工具的作用?
公司如何实现代码发布?
简述 RabbitMQ、Kafka、ZeroMQ的区别?
RabbitMQ如何在消费者获取任务后未处理完前就挂掉时,保证数据不丢失?
RabbitMQ如何对消息做持久化?
RabbitMQ如何控制消息被消费的顺序?
以下RabbitMQ的exchange type分别代表什么意思?如:fanout、direct、topic。
简述 celery 是什么以及应用场景?
简述celery运行机制。
celery如何实现定时任务?
简述 celery多任务结构目录?
celery中装饰器 @app.task 和 @shared_task的区别?
简述 requests模块的作用及基本使用?
简述 beautifulsoup模块的作用及基本使用?
简述 seleninu模块的作用及基本使用?
scrapy框架中各组件的工作流程?
在scrapy框架中如何设置代理(两种方法)?
scrapy框架中如何实现大文件的下载?
scrapy中如何实现限速?
scrapy中如何实现暂定爬虫?
scrapy中如何进行自定制命令?
scrapy中如何实现的记录爬虫的深度?
scrapy中的pipelines工作原理?
scrapy的pipelines如何丢弃一个item对象?
简述scrapy中爬虫中间件和下载中间件的作用?
scrapy-redis组件的作用?
scrapy-redis组件中如何实现的任务的去重?
scrapy-redis的调度器如何实现任务的深度优先和广度优先?
简述 vitualenv 及应用场景?
简述 pipreqs 及应用场景?
在Python中使用过什么代码检查工具?
简述 saltstack、ansible、fabric、puppet工具的作用?
B Tree和B+ Tree的区别?
请列举常见排序并通过代码实现任意三种。
请列举常见查找并通过代码实现任意三种。
请列举你熟悉的设计模式?
有没有刷过leetcode?
列举熟悉的的Linux命令。
公司线上服务器是什么系统?
解释 PV、UV 的含义?
解释 QPS的含义?
uwsgi和wsgi的区别?
supervisor的作用?
什么是反向代理?
简述SSH的整个过程。
有问题都去那些找解决方案?
是否有关注什么技术类的公众号?
最近在研究什么新技术?
是否了解过领域驱动模型?
统计:80 + 34 + 46 + 155 = 315题
暂时就先这样吧。我想能看到这里的同学,无外乎两种人:来拷贝题的人 和 来拷贝题的人。
但,在拷贝走的时候,你要想清楚一件事,把题拷走之后有个蛋用,搞明白答案对你来说才是最重要的。
好了,就酱紫。
老铁,这要是都不赞,说不过去吧!!!
基于mvc三层架构和ajax技术实现最简单的文件上传
前台页面提交文件
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>文件操作</title>
</head>
<body>
<form id="upFileForm">
<div style="margin:30px;">
<span style="margin-right:10px;">上传文件</span><input type="file" name="UpFile" id="UpFile" style="width:12%;" />
<input type="button" onclick="upFile()" value="确认上传" />
</div>
</form>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.form.js"></script>
<script>
//上传文件
function upFile() {
var file = document.getElementById("UpFile").files[0];
if (!file) {
alert("请选择文件!");
return;
}
var size = file.size / 1024 / 1024;
if (size > 50) {
alert("图片文件不能大于50M");
return;
}
$("#upFileForm").ajaxSubmit({
url: "/File/UploadFile",
type: "post",
dataType: "json",
success: function (data) {
if (data == "" || data == "0") {
alert("上传失败");
}
if (data == "2") {
alert("不支持上传该文件");
} else {
alert(JSON.stringify(data));
}
},
error: function (aa) {
alert(aa);
}
});
}
</script>
</body>
</html>
后台接收和上传
[HttpPost]
public JsonResult UploadFile()
{
HttpRequest request = System.Web.HttpContext.Current.Request;
HttpFileCollection FileCollect = request.Files;
string path = "";//文件的完整路径
//文件保存目录路径
string imgPathName = DateTime.Now.ToString("yyyyMMdd");//以日期为文件存放的上层文件夹名
string savePath = "/upload/file/" + imgPathName + "/";//文件存放的完整路径
//如果文件路径不存在则创建文件夹
if (!Directory.Exists(Server.MapPath(savePath)))
{
Directory.CreateDirectory(Server.MapPath(savePath));
}
//定义允许上传的文件扩展名
Hashtable extTable = new Hashtable();
extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
if (FileCollect.Count > 0)//如果集合的数量大于0,多文件上传情况
{
foreach (string str in FileCollect)
{
HttpPostedFile imgFile = FileCollect[str];//用key获取单个文件对象HttpPostedFile
string fileName = imgFile.FileName;//获取文件名
string fileExt = Path.GetExtension(fileName).ToLower();//获取文件后缀名
//判断文件类型是否正确
if (Array.IndexOf(((string)extTable["file"]).Split(','), fileExt.Substring(1).ToLower()) == -1)
{
//文件类型不正确
return Json("2");
}
string imgName = DateTime.Now.ToString("yyyyMMddhhmmss");//文件别名
string imgPath = savePath + imgName + "-" + imgFile.FileName;//构造文件保存路径
string AbsolutePath = Server.MapPath(imgPath);
imgFile.SaveAs(AbsolutePath);//将上传的东西保存
path = imgPath;//获得文件完整路径并返回到前台页面
}
return Json(path);
}
else
{
//上传失败
return Json("0");
}
}
事件管理
using System; using System.Collections.Generic; namespace CustomUtils { /// <summary> /// 事件管理器 /// </summary> public class EventManager { private readonly static Dictionary<string, Action<EventMessageArgs>> eventTask = new Dictionary<string, Action<EventMessageArgs>>(); /// <summary> /// 注册事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="actionValue">事件回调</param> public static void RegisterEvent(string eventKey, Action<EventMessageArgs> actionValue) { if (!eventTask.ContainsKey(eventKey)) { eventTask[eventKey] = actionValue; } else { if (eventTask[eventKey] != null) { Delegate[] dels = eventTask[eventKey].GetInvocationList(); foreach (Delegate del in dels) { if (del.Equals(actionValue)) return; } } eventTask[eventKey] += actionValue; } } /// <summary> /// 注销事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="actionValue">事件回调</param> public static void UnregisterEvent(string eventKey, Action<EventMessageArgs> actionValue) { if (eventTask.ContainsKey(eventKey)) { eventTask[eventKey] -= actionValue; if (eventTask[eventKey] == null) { eventTask.Remove(eventKey); } } } /// <summary> /// 触发事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="args">消息内容(只在单次触发有效,若要连续传递请使用 CopyMessage )</param> public static void PostEvent(string eventKey, EventMessageArgs args) { if (eventTask.ContainsKey(eventKey)) { eventTask[eventKey](args); } args.Dispose(); } } /// <summary> /// 事件通知数据 /// </summary> public class EventMessageArgs : IDisposable { public EventMessageArgs() { messages = new Dictionary<string, object>(); } private Dictionary<string, object> messages; /// <summary> /// 复制 /// </summary> /// <param name="msg"></param> public void CopyMessage(EventMessageArgs msg) { messages = msg.messages; } /// <summary> /// 新增或替换 /// </summary> /// <param name="key">索引</param> /// <param name="value">新数据</param> public void AddOrReplaceMessage(string key, object value) { if (CheckMessage(key)) messages[key] = value; else messages.Add(key, value); } /// <summary> /// 删除 /// </summary> /// <param name="key">索引</param> public void RemoveMessage(string key) { if (CheckMessage(key)) messages.Remove(key); } /// <summary> /// 获取内容 /// </summary> /// <param name="key">索引</param> /// <returns>引用类型数据</returns> public object GetMessage(string key) { if (CheckMessage(key)) return messages[key]; else return null; } /// <summary> /// 获取内容 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="key">索引</param> /// <returns>数据</returns> public T GetMessage<T>(string key) { if (CheckMessage(key)) return (T)messages[key]; else return default(T); } /// <summary> /// 释放 /// </summary> public void Dispose() { messages.Clear(); messages = null; } private bool CheckMessage(string key) { return messages.ContainsKey(key); } } }