分类目录归档:挨踢

一次网站故障的排除

先说下运行环境:

OS:winserve2012

DB:SQLSERVER

IIS+ASP.NET

最近某网站愈来愈慢,经咨询给出的回复是说网站缓存文件太多导致,需要删除缓存.

@ECHO OFF

iisreset /stop

Echo Deleting x86 Temporary ASP.NET Files

for /d %%i in (“%systemroot%\Microsoft.Net\Framework\v*”) do for /d %%f in (“%%i\Temporary ASP.NET Files\*”) do RD /q/s “%%f”

Echo Deleting x64 Temporary ASP.NET Files
for /d %%i in (“%systemroot%\Microsoft.Net\Framework64\v*”) do for /d %%f in (“%%i\Temporary ASP.NET Files\*”) do RD /q/s “%%f”

iisreset /start

@ECHO ON

操作后,刚开始有效果,后来有效时间越来越短,说明没对症,有联系了不靠谱的网站公司,回应说生成的静态文件也需要删除,由于海量的静态文件生成在一个文件夹中,系统的IO达到瓶颈,听着像是那么回事,于是增加批量删除静态文件操作.但是收效甚微.所以考虑没有找到问题所在,唯一的特征是重启IIS后会快很多.由此出发,重启IIS时,会释放所有的TCP连接,重启应用池.

首先 netstat-ano, IIS刚重启好和网站卡的时候,区别是增加了很多处理close_wait的连接,而且本地应用是HTTP,端口80,初步怀疑是程序的连接没有正常关闭,占用了大量系统资源,导致后续的出先等待.

所以解决方案一.是增大TCP连接数(server2012 默认值为5000),用tcpview发现总连接没有超过500,所以应该不需要增加默认连接数,如果要修改

修改最大TCP连接端口数(MaxUserPort)限制,修改方法:在注册表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中添加名为MaxUserPort,类型为DWORD(32-bit),值为65543(10进制)的项目并重启计算机。

方案二,强制关闭等待的连接,(持续观察中)

查询指定时间段内的工作日

SELECT dbo.IT_T_WORKDAY(‘2017-01-12′,’2018-01-12’,”)

 

ALTER FUNCTION [dbo].[IT_T_WORKDAY]

–指定日期范围内工作日. by lzp
(
@sdate varchar(50),
@edate varchar(50),
@str VARCHAR(5000)
)
RETURNS VARCHAR(5000)
AS
BEGIN

SELECT @str=COUNT(*) FROM (SELECT t.yyyymmdd
FROM ( SELECT CONVERT (CHAR(10), DATEADD(dd, number, @sdate), 120) AS yyyymmdd,
DATEPART(dw, CONVERT (CHAR(10), DATEADD(dd, number, @sdate), 120)) wn
FROM master.dbo.spt_values AS spt
WHERE type = ‘p’
AND CONVERT (CHAR(10), DATEADD(dd, number, @sdate), 120) < = @edate ) t
WHERE t.wn IN ( 2, 3, 4, 5, 6 )
AND t.yyyymmdd NOT IN ( SELECT HDAY
FROM dbo.IT_T_HDAY )
UNION
SELECT td.TDAY
FROM dbo.IT_T_TDAY td
WHERE td.TDAY >= @sdate
AND td.TDAY <= @edate) t WHERE 1=1

RETURN @str
END

 

 

 

 

/*
Navicat SQL Server Data Transfer

工作日休假表

Target Server Type : SQL Server
Target Server Version : 105000
File Encoding : 65001

Date: 2018-01-26 10:59:35
*/

— —————————-
— Table structure for IT_T_HDAY
— —————————-
DROP TABLE [dbo].[IT_T_HDAY]
GO
CREATE TABLE [dbo].[IT_T_HDAY] (
[ID] int NOT NULL ,
[HDAY] date NULL ,
[REMARK] varchar(50) NULL
)

GO

— —————————-
— Indexes structure for table IT_T_HDAY
— —————————-

— —————————-
— Primary Key structure for table IT_T_HDAY
— —————————-
ALTER TABLE [dbo].[IT_T_HDAY] ADD PRIMARY KEY ([ID])
GO

 

 

 

/*
Navicat SQL Server Data Transfer

周末调休表

Target Server Type : SQL Server
Target Server Version : 105000
File Encoding : 65001

Date: 2018-01-26 10:59:54
*/

— —————————-
— Table structure for IT_T_TDAY
— —————————-
DROP TABLE [dbo].[IT_T_TDAY]
GO
CREATE TABLE [dbo].[IT_T_TDAY] (
[ID] int NOT NULL ,
[TDAY] date NULL ,
[REMARK] varchar(50) NULL
)

GO

— —————————-
— Indexes structure for table IT_T_TDAY
— —————————-

— —————————-
— Primary Key structure for table IT_T_TDAY
— —————————-
ALTER TABLE [dbo].[IT_T_TDAY] ADD PRIMARY KEY ([ID])
GO

 

 

 

 

IQSYS/framework

科技改变生活

当前科技越来越发达,没有什么事情是不能通过一行代码来解决的,如果真有,那就用两行代码

https://github.com/wangshub/wechat_jump_game

 

顺:

灯塔在线  自动答题实现思路

手机安装灯塔APP,通过ADB连接PC,获取当前屏幕截图,通过OCR获取内容并到题库中查出答案,然后输入到APP界面.

 

 

如何通过搜索引擎快速找到你想要的

1、双引号

把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。bd和Google 都支持这个指令。例如搜索: “seo方法图片”

2、减号

减号代表搜索不包含减号后面的词的页面。使用这个指令时减号[前面]必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和bd都支持这个指令。
例如:搜索 -引擎
返回的则是包含“搜索”这个词,却不包含“引擎”这个词的结果

3、星号
星号*是常用的通配符,也可以用在搜索中。百度不支持*号搜索指令。
比如在Google 中搜索:搜索*擎
其中的*号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。

4、inurl
inurl: 指令用于搜索查询词出现在url 中的页面。bd和Google 都支持inurl 指令。inurl 指令支持中文和英文。
比如搜索:inurl:搜索引擎优化

返回的结果都是网址url 中包含“搜索引擎优化”的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。

5、inanchor
inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor。
比如在Google 搜索 :inanchor:点击这里
返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。
可以用来找到某个关键词的竞争对收,而且这些竞争对手往往是做过SEO 的。研究竞争对手页面有哪些外部链接,就可以找到很多链接资源。

6、intitle
intitle: 指令返回的是页面title 中包含关键词的页面。Google 和bd都支持intitle 指令。
使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。

7、allintitle
allintitle:搜索返回的是页面标题中包含多组关键词的文件。
例如 :allintitle:SEO 搜索引擎优化
就相当于:intitle:SEO intitle:搜索引擎优化
返回的是标题中中既包含“SEO”,也包含“搜索引擎优化”的页面

8、allinurl
与allintitle: 类似。
allinurl:SEO 搜索引擎优化
就相当于 :inurl:SEO inurl:搜索引擎优化

9、filetype
用于搜索特定文件格式。Google 和bd都支持filetype 指令。
比如搜索filetype:pdf SEO
返回的就是包含SEO 这个关键词的所有pdf 文件。

10、site
site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。

11、linkdomain
linkdomain:指令只适用于雅虎,返回的是某个域名的反向链接。雅虎的反向链接数据还比较准
确,是SEO 人员研究竞争对手外部链接情况的重要工具之一。
比如搜索

linkdomain:cnseotool.com -site:cnseotool.com

得到的就是点石网站的外部链接,因为-site:cnseotool.com 已经排除了点石本身的页面,也就是内部
链接,剩下的就都是外部链接了。

12、related
related:指令只适用于Google,返回的结果是与某个网站有关联的页面。比如搜索

related:cnseotool.com

我们就可以得到Google 所认为的与点石网站有关联的其他页面。 这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。

上面介绍的这几个高级搜索指令,单独使用可以找到不少资源,或者可以更精确地定位竞争对
手。把这些指令混合起来使用则更强大。

inurl:gov 减肥

返回的就是url 中包含gov,页面中有“减肥”这个词的页面。很多SEO 人员认为GVM和学校网
站有比较高的权重,找到相关的GVM和学校网站,就找到了最好的链接资源。

下面这个指令返回的是来自.中国教育和科研计算机网CERNET,也就是学校域名上的包含“交换链接”这个词的页面:

inurl:.中国教育和科研计算机网CERNET 交换链接

从中SEO 人员可以找到愿意交换链接的学校网站。

或者使用一个更精确的搜索:

inurl:.中国教育和科研计算机网CERNET intitle:交换链接

返回的则是来自中国教育和科研计算机网CERNET 域名,标题中包含“交换链接”这四个字的页面,返回的结果大部分应
该是愿意交换链接的学校网站。

再比如下面这个指令:

inurl:中国教育和科研计算机网CERNET*register

返回的结果是在.中国教育和科研计算机网CERNET 域名上,url 中包含“forum”以及“register”这两个单词的页面,也就是
学校论坛的注册页面。找到这些论坛,也就找到了能在高权重域名上留下签名的很多机会。

下面这个指令返回的是页面与减肥有关,url 中包含links 这个单词的页面:

减肥 inurl:links

很多站长把交换链接页面命名为links.html 等,所以这个指令返回的就是与减肥主题相关的交换
链接页面。

下面这个指令返回的是url 中包含gov.cn 以及links 的页面,也就是GVM域名上的交换链接页面:

allinurl:gov.cn+links

最后一个例子,在雅虎搜索这个指令:

linkdomain:cnseotool.com -linkdomain:cnseotool.com
返回的是链接到点石网站,却没有链接到我的博客的网站。使用这个指令可以找到很多连向你
的竞争对手或其他同行业网站,却没连向你的网站的页面,这些网站是最好的链接资源。
高级搜索指令组合使用变化多端,功能强大。一个合格的SEO必须熟练掌握这几个常用指令的
意义及组合方法,才能更有效率地找到更多竞争对手和链接资源。

找外链的时候你可以用这几种命令组合,例如site:.com inurl:blog “post a comment” -”comments closed” -”you must be logged in” “输入你的关键词“,
site:.com 是 指, 只显示.com的网站。 如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。
“post a comment” -”comments closed” -”you must be logged in” 是指, “能够写评论的” 减去“ 关闭评论的” 再减去“ 必须要登录才能写评论的”。

程序问题处理遇到的坑

  1. 能写成配置属性的字段就不要写死在代码里面,不要觉得写好的程序就不会修改.公共参数放配置文档,修改频繁放数据库,量大写内存,关闭时注销
  2. 遇到问题,要复盘.在问题出现的伊始解决掉.这样花费成本最小.
  3. 好记性不如烂笔头
  4. 新的一项任务,做之前要把最复杂的情况考虑到,再做设计.

SQL Server 触发器 的 增删改查

一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约`束。

二: SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。
三:Instead of 和 After触发器
SQL Server2000提供了两种触发器:Instead of 和After 触发器。这两种触发器的差别在于他们被激活的同:

Instead of触发器用于替代引起触发器执行的T-SQL语句。除表之外﹐Instead of 触发器也可以用于视图﹐用来扩展视图可以支持的更新操作。

After触发器在一个Insert,Update或Deleted语句之后执行﹐进行约束检查等动作都在After触发器被激活之前发生。After触发器只能用于表。

一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of 触发器﹐一个表的每个修改动作都可以有多个After触发器。
四:触发器的执行过程
如果一个Insert﹑update或者delete语句违反了约束﹐那幺After触发器不会执行﹐因为对约束的检查是在After触发器被激动之前发生的。所以After触发器不能超越约束。

Instead of 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立﹐其它任何操作还没有发生时被执行。因为Instead of 触发器在约束之前执行﹐所以它可以对约束进行一些预处理。

五:使用T-SQL语句来创建触发器

基本语句如下:

create trigger trigger_name
on {table_name view_name}
{for After Instead of }
[ insert, update,delete ]
as
sql_statement

六:删除触发器:

基本语句如下:

drop trigger trigger_name

七:查看数据库中已有触发器:

— 查看数据库已有触发器
use jxcSoftware
go
select * from sysobjects where xtype=’TR’

— 查看单个触发器
exec sp_helptext ‘触发器名’

八:修改触发器:

基本语句如下:

alter trigger trigger_name
on {table_name view_name}
{for After Instead of }
[ insert, update,delete ]
as
sql_statement

九:相关示例:
1:在Orders表中建立触发器﹐当向Orders表中插入一条订单记录时﹐检查goods表的货品状态status是否为1(正在整理)﹐是﹐则不能往Orders表加入该订单。

create trigger orderinsert
on orders
after insert
as
if (select status from goods,inserted
where goods.name=inserted.goodsname)=1
begin
print ‘the goods is being processed’
print ‘the order cannot be committed’
rollback transaction –回滚﹐避免加入
end

2:在Orders表建立一个插入触发器﹐在添加一条订单时﹐减少Goods表相应的货品记录中的库存。

create trigger orderinsert1
on orders
after insert
as
update goods set storage=storage-inserted.quantity
from goods,inserted
where
goods.name=inserted.goodsname

3:在Goods表建立删除触发器﹐实现Goods表和Orders表的级联删除。

create trigger goodsdelete
on goods
after delete
as
delete from orders
where goodsname in
(select name from deleted)

4:在Orders表建立一个更新触发器﹐监视Orders表的订单日期(OrderDate)列﹐使其不能手工修改.

create trigger orderdateupdate
on orders
after update
as
if update(orderdate)
begin
raiserror(‘ orderdate cannot be modified’,10,1)
rollback transaction
end

5:在Orders表建立一个插入触发器﹐保证向Orders表插入的货品名必须要在Goods表中一定存在。

create trigger orderinsert3
on orders
after insert
as
if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0
begin
print ‘ no entry in goods for this order’
rollback transaction
end

 

6:Orders表建立一个插入触发器,保证向Orders表插入的货品信息要在Order表中添加

alter trigger addOrder
on Orders
for insert
as
insert into Order
select inserted.Id, inserted.goodName,inserted.Number from inserted

前端树 Frontend Knowledge Structure

<

article class=”markdown-body entry-content” itemprop=”text”>

Frontend Knowledge Structure

项目起源

还记得@jayli 的这幅前端知识结构图么。

前端知识结构

图片的形式具有诸多的不便。缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目。我们可以通过协作的方式来共同维护这个项目。Git的历史记录也可以见证前端行业的一些变迁。

可视化效果

前端开发知识结构

前端书籍推荐

★越少越简单,越适合入门,★多的要么是难度比较高,要么是比较适合在后面看,比如讲性能之类的书.

CSS

JavaScript

性能实践

版本控制工具

后端书籍推荐

Linux管理

Linux编程

C/C++

前端工作面试