1.encodeURI转码
例子 1
编码:encodeURI(encodeURI(传值))
解码:decodeURI(接收值);
传参数
var _t = encodeURI(encodeURI(title));
window.location.href = “b.html?title=”+_t;
接收
var title = decodeURI(_t);
只需要转一次码
方法二:
escape(string) 转码
unescape(解码) 解码
2.正则表达式,检查是否包含数字,字母,特殊字符,密码的长度是否大于8位
1.正则表达式,检查是否包含数字,字母,特殊字符,密码的长度是否大于8位
验证是否为弱密码 --Biny 添加于 2016-5-23--
function CheckPwd(inword) {
var num = 0;
var reg = /\d/; //如果有数字
if (reg.test(inword)) {
num++;
}
reg = /[a-zA-Z]/; //如果有字母
if (reg.test(inword)) {
num++;
}
reg = /[^0-9a-zA-Z]/; //如果有特殊字符
if (reg.test(inword)) {
num++;
}
if (inword.length < 8) { //如果密码小于8
num = 0;
}
return num;
}
3.多线程
https://www.cnblogs.com/dotnet261010/p/6159984.html
http://www.cnblogs.com/yunfeifei/p/4106318.html
-
一个进程可有多个线程
-
多线程优点
- 可以随时停止启用任务,可以设置每个任务的优先级
- 可以更高效率的处理任务
-
缺点
- 开的线程越多,内存资源消耗越多。
- 线程之间不是独立的,对公共的资源会影响
- 多线程会导致控制复杂,造成程序缺陷。
多线程Thread的用法
创建不带参数方法的线程
class Program
{
static void Main(string[] args)
{
//四种多线程执行不带参数的方法
test1 t1 = new test1(); //实例化类
Thread thread = new Thread(new ThreadStart(test)); //静态方法可以直接使用
Thread th1 = new Thread(new ThreadStart(t1.test1)); //非静态的方法,需要实例化才能使用。
Thread th2 = new Thread(delegate() { Console.Write("这是一个委托方法!"); }); //或者用委托方法
Thread th3 = new Thread(()=>Console.WriteLine("lamda表达式方法")); //lamda表达式方法
thread.Start();
th1.Start();
Console.Read();
}
public static void test()
{
Console.Write("这是一个静态方法");
}
class test1
{
public void test1()
{
Console.Write("这是一个非静态方法");
}
}
}
4. 测试性能测试工具和抓包工具
-
用loadrunner压的呀
-
Fiddler抓包
5. 数据库优化链接
大数据量数据库优化
https://www.cnblogs.com/achen0502/p/5120352.html
- 查询优化有以下几点
- 数据行的长度不要超过8020字节,在物理查询时会占用两行,消耗资源,同时这个标准也可以限定表字段的个数,如果每个字段是varchar(200),那么最大不超过40个字段
- 字段长度在满足最大的前提下,尽量设置的短一些,提高查询效率,建立索引时,减少资源消耗。
- where 后面条件 因为sql server自带”查询分析优化器“,能自动判断哪个条件在前哪个在后。
- 尽量不要进行null值判断
select id from t where num is null
可以在num设置为0,或者设置为空字符串。 - 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描,!=是 SQL92标准 <>是现行标准,尽量用<>比较好。
- 尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。
SELECT * FROM T1 WHERE NAME LIKE ‘%L%’ - 尽量不要在索引字段上进行表达式或函数操作,这样会导致索引无效。
- 很多时候用 exists是比in一个好的选择
- 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定
- 充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,这时在 WHERE 子句中将连接条件相等的都写上,有可能大大提高查询速度。
- 大数据表尽量不使用Select Into,SELECT INOT 语句会导致表锁定,阻止其他用户访问该表
6. nvarchar,varchar,nchar,char的区别
字段类型 | 存储方式 | 存储最大长度 | 备注 |
---|---|---|---|
nvarchar(8) | 按字符数存储 | 可变长度 最大8个汉字 8个字母 最大 nvarchar(4000) | n表示字符数,一个汉字或一个字母都是一个字符,但在空间上都占双字节, |
varchar(8) | 按字节数存储 | 可变长度 4个汉字 8个字母 最大 varchar(8000) | n表示字节数,存储大小就是实际字节长度,一个汉字两个字节,一个字母或数字一个字节, |
nchar(8) | 按字符数存储 | 固定长度 固定8个汉字 8个字母 最大 nchar(4000) | 不足8个长度,会用补空格 |
char(8) | 按字节数存储 | 固定长度 固定4个汉字 8个字母 最大 char(8000) | 不足长度,同样会补空格 |
7.数据库并发控制
https://blog.csdn.net/bcbobo21cn/article/details/51013467
-
锁的类型
基本的封锁类型有两种:排它锁( Exclusive Locks ,简称 x 锁)和共享锁 ( Share Locks,简称 S 锁)。排它锁又称为写锁。若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A ,其他任何事务都不能再对 A 加任何类型的锁,直到 T 释放 A 上的锁。这就保证了其他事务在 T 释放 A 上的锁之前不能再读取和修改 A 。共享锁又称为读锁。若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A但不能修改 A ,其他事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。这就保证了其他事务可以读 A ,但在 T 释放 A 上的 S 锁之前不能对 A 做任何修改。-
排他锁锁住对象后,该事务操作可以操作和读取,其他操作不能修改和也不能读该对象。
-
共享锁:锁住对象后,锁住的操作只能读,不能修改,其他的才对锁住的对象也只能读,不能修改,直到释放共享锁。
-
-
事务中的表都进行了排他锁控制。
-
死锁情况。
跟着做:打开两个查询窗口,把下面的语句,分别放入2个查询窗口,在5秒内运行2个事务模块。
事务一
begin tran
update lives set play=‘羽毛球’
waitfor delay ‘0:0:5’
update dbo.Earth set Animal=‘老虎’
commit tran
十三五
begin tran
update Earth set Animal=‘老虎’
waitfor delay ‘0:0:5’ --等待5秒执行下面的语句
update lives set play=‘羽毛球’
commit tran
select * from lives
select * from Earth
8.索引
索引是从数据库中获取数据的最高效方式之一。95% 的数据库性能问题都可以采用索引技术得到解决
-
聚集索引和非聚集索引区别
- 聚集索引(CLUSTERED):聚集索引就相当于使用字典的拼音查找,因为聚集索引存储记录是物理上连续存在的,即拼音 a 过了后面肯定是 b 一样。
- 非聚集索引(NONCLUSTERED):非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续
- 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
-
索引的语法
create uniqe/ clustered/nonclustertd index index_name 表(字段)
查询索引
sp_helpindex ‘表名’
删除索引
Dop index on ‘表名’
- 在非主键字段上建聚集索引
–删除主键约束,包括索引
ALTER TABLE tb_main DROP CONSTRAINT PK__tb_main__3213E83FF2BE0193
–修改其他字段为聚集索引
CREATE CLUSTERED INDEX idx_clusteredq ON tb_main(name)
ALTER TABLE dbo.tb_main ADD PRIMARY KEY (id)
9. C#获取中文字中提取手机号和固定电话号码
class Program
{
static void Main(string[] args)
{
string n = "水电费就上岛咖啡021-565622245打撒所多";
string r= IsLegalMobilePhone(n);
if (string.IsNullOrEmpty(r))
{
r = IsTelephone(n);
}
Console.Write(r);
Console.Read();
}
public static string IsLegalMobilePhone(String MobilePhone)
{
//Regex myReg = new Regex(@"[1,9][3,4,5,8,6,7,9]\d{9}");
Regex myReg = new Regex(@"[1][3,4,5,6,7,8,9]\d{9}");
if (MobilePhone.ToString() == "" || MobilePhone.ToString() == null)
{
return string.Empty;
}
else
{
if (myReg.IsMatch(MobilePhone))
{
string ps = "";
var match = myReg.Matches(MobilePhone);
foreach (Match item in match)
{
if (string.IsNullOrEmpty(ps))
ps += item.Value;
else
ps += "," + item.Value;
}
return ps;
}
else
return string.Empty;
}
}
public static string IsTelephone(String MobilePhone)
{
Regex myReg = new Regex(@"(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}");
if (MobilePhone.ToString() == "" || MobilePhone.ToString() == null)
{
return string.Empty;
}
else
{
if (myReg.IsMatch(MobilePhone))
{
string ps = "";
var match = myReg.Matches(MobilePhone);
foreach (Match item in match)
{
if (string.IsNullOrEmpty(ps))
ps += item.Value;
else
ps += "," + item.Value;
}
return ps;
}
else
return string.Empty;
}
}
}
10. 创建主外键复习
–主表
CREATE TABLE tb_main
(
id INT **PRIMARY KEY **,
name VARCHAR(20)
)
–外键表
CREATE TABLE tb_foreign(
id INT IDENTITY(1,1),
foreign_id INT FOREIGN KEY REFERENCES tb_main(id)
)
11.设计模式
单例模式
public class ChatServiceTask
{
// 定义一个静态变量来保存类的实例
private static ChatServiceTask uniqueInstance;
// 定义私有构造函数,使外界不能创建该类实例
private ChatServiceTask()
{
}
/// <summary>
/// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
/// </summary>
/// <returns></returns>
public static ChatServiceTask GetInstance()
{
// 如果类的实例不存在则创建,否则直接返回
if (uniqueInstance == null)
{
uniqueInstance = new ChatServiceTask();
}
return uniqueInstance;
}
}
调用:全局调用,通一的入口,且ChatServiceTask只会被实例化一次。
ChatServiceTask ChatServiceTask=ChatServiceTask.GetInstance();
12.ROW_NUMBER(),DENS_RANK()和Rank()的区别。
- ROW_NUMBER() 排名不重复,序号一次递增
排名 | 成绩 |
---|---|
1 | 90 |
2 | 90 |
3 | 80 |
4 | 70 |
2.DENS_RANK() 排名重复,序号一次递增
排名 | 成绩 |
---|---|
1 | 90 |
1 | 90 |
2 | 80 |
3 | 70 |
- Rank() 排名不重复,会跳过行号
排名 | 成绩 |
---|---|
1 | 90 |
1 | 90 |
3 | 80 |
4 | 70 |
13. 微信图片禁止外链 此图片来自微信公众平台未经允许不可引用 处理办法
在head中加上//亲测该发法有效