技术积累
文章平均质量分 50
孙大诚_SunRobin
码农奋斗自强不息http://my.csdn.net/#
展开
-
Fiddler无法捕获C#中HttpClient与HttpWebRequest发出的localhost请求
在使用C#进行网络请求的编写,HttpClient与HttpWebRequest发出的请求,也不会被Fiddler捕获。解决办法就是在domain上加上fiddler后缀。, 这样就可以被fiddler捕获了。原创 2023-01-22 20:26:52 · 770 阅读 · 1 评论 -
127.0.0.1 / localhost This site can‘t provide a secure connection 该网站无法提供安全的连接
在本地使用Chrome调试网站的时候,有时候会出现"This site can't provide a secure connection 该网站无法提供安全的连接"的异常。原因就是此前在访问127.0.0.1的时候,因为某些配置出现了自动跳转,从http://127.0.0.1跳转到了https://127.0.0.1, 而现在调试网站,虽然没有了让其自动跳转的配置,但是Chrome浏览器记住了这个地址缓存了下来,依然还是自动跳转到了https.但是现在调试的网站又不支持https,所以Chrome就会提原创 2022-07-04 09:40:02 · 6091 阅读 · 1 评论 -
IIS Express调试ASP.NET网站出现Oracle.DataAccess incorrect format问题
使用IIS Express在调试ASP.NET网站的时候抛出异常 Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.看到incorrect format异常,大概是x64与x86的不兼容问题。然后去Bin目录检测一下每个dll的格式。发现无论是网站代码的dll是Any CPU原创 2022-06-10 17:24:42 · 736 阅读 · 1 评论 -
跨域的简单理解
跨域限制是浏览器端的限制,也是浏览器出于安全考虑,需要服务端共同参与,来保障网页信息的安全。跨域限制的原因:AJAX同源策略主要用来防止CSRF攻击。如果没有AJAX同源策略,相当危险,我们发起的每一次HTTP请求都会带上请求地址对应的cookie,那么可以做如下攻击:用户登录了自己的银行页面 mybank.com,mybank.com向用户的cookie中添加用户标识。用户浏览了恶意页面 evil.com。执行了页面中的恶意AJAX请求代码。evil.com向mybank.com发起AJAX HT原创 2022-01-22 09:19:26 · 645 阅读 · 0 评论 -
如何优雅的停止睡眠状态的Windows service
一般在Windows service中,都是在OnStart方法中,启用一个新的线程去完成一些定时的任务。有时候定时任务是通过一个死循环以及线程睡眠来达到隔一段时间执行一次的效果。如下,任务1秒钟执行一次。private bool _signal = true;public void OnStart(){ Task.Factory.StartNew(() => { while (_signal)原创 2021-09-21 11:47:11 · 504 阅读 · 0 评论 -
Chrome Devtools中保持住CSS状态
如图,在单击这个Cancel按钮的时候,这个Button的CSS class会发生变化,按钮的颜色会变深。这时候我想拷贝出来这些新增加的class,我打开Chrome Devtools,然后在Devtools中选中这个元素,点击鼠标右键想打开Copy的弹出框的时候,这个Cancel按钮的CSS class又变回到了最开始的状态,无法拷贝。也就是说,单击了这个Cancel按钮后,一旦失去焦点,它的class又会变道原始的样子,但是如果想拷贝它的类,是无法不让它失去焦点的。那么,如果让Button在失去焦点的情原创 2021-09-21 11:45:23 · 526 阅读 · 0 评论 -
List<KeyValuePair<string, int>> 返回空值不为null
在List中使用Find进行查找的时候,如果没有找到,正常情况下会返回一个null. 比如一个List<string>中,如果根据某个字符串过滤,没有找到的话,会返回一个null.如果List<KeyValuePair<string, int>>中使用Linq进行查找,没有找到的情况下,返回的并非是null,而是[null, 0], 分别为string与int的默认值。这是为什么?查看List的源码,在没有找到符合条件的元素的时候,会返回def原创 2021-08-30 16:12:06 · 1253 阅读 · 1 评论 -
数据库读写分离的设置
在一个网站访问量大的时候,数据库资源是最宝贵的资源。一般网站来讲,数据库能够承受的并发请求,要远远小于网站页面能够承受的并发请求,因为数据库有大量的IO操作,一台数据库能够应对的连接数,要远远小于IIS或者Tomcat能够应对的连接数。这就是为什么要使用数据库连接池,如果有1000个请求到达了IIS,而数据库连接池的大小只有10个连接,那么这1000个请求就要排队,从连接池中拿到连接,然后从数据库中取得数据。在高并发情况下,为什么要做读写分离?首先,读写分离可以增加数据库的个数,相当于对数据库的水平原创 2021-05-13 20:20:31 · 542 阅读 · 0 评论 -
网站页面第一次速度很慢然后速度快的原因分析
最近使用ASP.NET写的一个页面,用户反映页面加载很慢,需要几十秒钟,需要分析优化一下。这是一个ASP.NET网站,从数据库里读取的商品数据,然后显示在前端页面中。简单描述一下查找问题的过程,以及其中学到的经验。首先,要分析一下到底是哪里慢。一般第一反应都是SQL语句是不是慢,需不需要加索引优化一下。使用SQL Profiler监听的方式,找到了运行的SQL语句,拷贝出来,然后在SQL Server Management Studio中运行,发现2秒就执行完毕。所以排除了SQL慢的问题。其次,既然原创 2021-05-05 17:25:01 · 2268 阅读 · 0 评论 -
SpringBoot项目中对RestTemplate进行网络代理Proxy设置使得Fiddler能够进行抓包
Fiddler是非常好用的工具,能够非常方便的分析Http请求。最近SpringBoot项目需要使用RestTemplate调用远程的一个Rest API. 使用Postman测试调用那个API的时候一切正常,使用Java代码RestTemplate调用的时候就有问题。这时候就想到了使用Fiddler抓包,看一看这两次的http请求的具体内容有什么区别。这时候发现,Fiddler竟然不能抓到Java代码的Http请求。大致原因是JVM跳过了系统的代理设置,这就需要我们自己写代码来个RestTemplate原创 2020-06-29 16:13:16 · 6423 阅读 · 0 评论 -
使用延迟队列处理失效订单问题
在处理订单过程中,如果一个订单生成之后,在特定时间内(比如15分钟)没有付款,那么我们就要删除这一笔订单,释放占据的货物资源。在这种场景下,最直观的做法就是写一个定时job, 每分钟扫描一下数据库的订单表,如果订单超过了15分钟,那么订单状态改为删除,并且商品表数量要加1,因为刚刚删除的订单释放了一个商品。这样会给数据库造成很大的压力,而且如果长时间都没有过期的订单,而job依然会每分钟跑一...原创 2020-03-30 17:27:13 · 2316 阅读 · 1 评论 -
电商系统ID生成策略简单介绍
在系统中生成ID的方式有很多种,现在简单分析一下各种方式的适用场景以及优缺点。1. UUID. 唯一性,在单体环境下或者分布式环境下都不会出现重复。但是UUID的劣势也是一大堆a.没有可读性,导致程序在调试的时候数据不直观,不能像整型ID一样直观的看到大致运行到了哪条记录,如果比对两条数据,也不能很快看出谁先谁后。b. 32位字符串太长,占用数据库资源。c. 在对主键进行索引...原创 2020-01-06 15:15:41 · 2417 阅读 · 0 评论 -
Redis连接池的简单设计与实现
连接池属于一种池化技术,在现在高并发场景下用的很多,其作用如下。1. 与Redis服务器是TCP管道连接。TCP的创建需要三次握手,如果使用连接池技术,不用每次都是创建TCP连接,避免了耗时的三次握手操作。而且在非池化的情况下,每次的TCP销毁要四次挥手,以及java对象的GC,都需要时间与性能消耗。2. 资源分配。如果不适用池化技术,在多台机器访问同一个Redis服务器的情况下,如果每台...原创 2019-12-31 16:38:29 · 1447 阅读 · 0 评论 -
Java中List(LinkedHashMap) 转为 ArrayList(Object) 的方法
在SpringBoot中使用RestTemplate来调用远端的服务,本质上返回来的都是Json字符串。在下边的例子中,我们使用List<Template>来接收远端返回来的值。Template是一个Java Model.List<Template> list = restTemplate.getForEntity(urlFullTemplates, ArrayLis...原创 2019-12-20 14:37:13 · 9391 阅读 · 3 评论 -
电商秒杀系统应对高并发相关的技术
在电商秒杀系统中,短时间内应对大量请求,造成高并发。这样,程序应该尽可能的过滤掉无效的请求,然后对于有效请求,使用各种技术进行处理。1. 对网页中的图片或者不经常改动的其他静态资源进行浏览器端的缓存。 Cache-Control no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以...原创 2019-12-10 18:00:05 · 367 阅读 · 0 评论 -
JSP页面中的相对路径问题
在JSP页面中,根据解析地方的不同可以分为两种,一种是在服务器端解析的,还有一种是在客户浏览器端解析的。在JSP页面内嵌的java代码中,”/”是相对于项目应用webapp而言的,例如在项目myProject有目录dir,该目录中有文件test1.jsp与test2.jsp.在页面test1.jsp中嵌入有java代码response.sendRedirect(“/test2.jsp”),这里原创 2012-01-13 11:42:16 · 6438 阅读 · 2 评论 -
表单以及href中文传参问题
客户端浏览器向服务器提交中文参数的时候,分为两种情况:点击href链接和提交表单。1、点击href链接 http://127.0.0.1/Test/test.jsp?name=黄河 虽然在web.xml中进行配置的时候,使用了过滤器对编码进行转换,但是过滤器在这里并不起作用。这就需要在JSP页面中进行转码。 ' >链接 在服务器端进行接收的时候,需要对字符进行原创 2012-01-31 11:31:40 · 4996 阅读 · 0 评论 -
区别document.forms[0].usernames与document.getElementByName(usernames)
testtesttesttesttesttestdocument.forms[0]在HTML页面中有一个form表单或者多个form表单的时候,都是返回一个NodeList类型的form数组document.forms[0].usernames,这里的usernames可以是id的值,也可以是name的值,在这里这两个属性是等价的。而且,不会区分组件是文本框,是单选框,原创 2012-01-31 11:17:18 · 6400 阅读 · 2 评论 -
以/开头的两种不同相对路径的解析
在JSP页面中,根据解析地方的不同可以分为两种,一种是在服务器端解析的,还有一种是在客户浏览器端解析的。在JSP页面内嵌的java代码中,”/”是相对于项目应用webapp而言的,例如在项目myProject有目录dir,该目录中有文件test1.jsp与test2.jsp.在页面test1.jsp中嵌入有java代码response.sendRedirect(“/test2.jsp”),原创 2012-02-14 11:08:44 · 2247 阅读 · 0 评论 -
Server.Transfer()方法服务器端重定向后,相对路径问题
有关Server.Transfer()方法找不到路径的问题浏览器端url地址为http://127.0.0.1:1400/Page/Page1.aspx,发送请求到服务器端,进行服务器端跳转,Server.Transfer("/Page/Page2.aspx"),/表示网站的根目录。当Page2.aspx的html代码发送到浏览器端后,浏览器端地址栏的url地址已然是Page1.aspx,在浏原创 2012-08-05 08:09:20 · 3416 阅读 · 0 评论 -
.Net中的缓存问题
缓存是一种用空间换取时间的技术。缓存存在失效问题,为了保证从缓存中读取的数据和从数据库中读取的数据一致,则需要在数据库中对应的数据发生变化的时候,清除缓存中相应的数据。if(Cache["dataList"] == null){查询数据库……Cache["dataList"] = list; //设置aspx页面内部的缓存}else{list = Cache["da原创 2012-08-14 22:12:16 · 1144 阅读 · 0 评论 -
根据字符串中的指定子字符串将原字符串分割成字符串数组
string字符串有根据一个char来分割成子字符串数组的方法string test = "dd\@djdd\@ggg";string[] array = test.Split('j');但是,并没有根据字符串分割子字符串的方法 string[] Splirt(string symbol)这个方法根本就不存在此时,要实现这个方法,可以通过Replace方法与split方法结原创 2012-10-02 09:38:09 · 4990 阅读 · 1 评论 -
状态保持中的Cookie与Session
状态保持CookieCookie是一种能够让网站服务器把少量数据存储到客户端的硬盘或内存,并且读出来的一种技术。可以用来记录用户的ID,浏览过的网页,或者停留的时间等,当再次通过浏览器访问该网站的时候,浏览器会自动将属于该网站的Cookies发送到服务器去。Cookie可以分为存储在内存中和存储在硬盘两种方式,存储在硬中的时候,一个网站通常有一个.txt文件来存Cookies,一个Cookie原创 2012-11-17 19:21:17 · 3979 阅读 · 0 评论 -
windows下架设SVN服务器并设置开机启动
1、安装SVN服务器,到http://subversion.apache.org/packages.html上下载windows版的SVN,并安装,在命令行下运行svn命令,如下所以,则svn服务器安装成功。Txt代码 C:\Documents and Settings\Administrator>svn 使用“svn help”得到用法。转载 2012-12-01 18:40:12 · 869 阅读 · 0 评论 -
修改SqlServer的sa用户密码
1. 打开SQL Server,连接数据库引擎,身份验证方式选择无所谓,不知道sa密码的就选“Windows身份验证”,连接数据库;2. 展开,在“安全性”>“登录名”中找到sa,右击,选择“属性”。在右侧的“常规”选项中,勾去“强制实施密码策略”与“强制密码过期”,在“密码”与“确认密码”栏中输入你所希望的密码。在“状态”选项中,确保在“是否允许连接到数据库引擎”中sa是原创 2012-11-21 20:12:56 · 4553 阅读 · 0 评论 -
面向接口编程与Spring模拟
以一个简单的用户管理的例子来模拟Spring的依赖注入首先,要搞清楚在一个项目中为什么要进行分层。方案一进行用户管理,这里我们只有一个实体类User, 然后对于User的增删改查放到UserService中完成。这样会有一个问题,这样的程序写出来没有扩展性。因为UserService中要写入很多连接数据库的逻辑,现在使用的是MySQL数据库,如果项目变动要用Oracle原创 2012-12-16 15:26:08 · 2549 阅读 · 0 评论 -
反射机制简单解析
初学者可能会想反射是什么,有什么作用。那我就以一个简单的小需求开始。现在有3个类,A,B,C. 现在我想要一个方法,根据输入的字符串,获取相应的实例对象,即当我给这个对象传入“A”的时候,我要获取一个A实例,传入“B”的时候获取一个B实例,有人说用if, 那么如果有1000个类,就用1000个if或者case么,而且,如果不事先知道有多少种情况呢?Public Object (string原创 2012-12-29 09:55:30 · 1180 阅读 · 0 评论 -
在MyEclipse中编辑XML没有智能提示的问题
在Struts, Spring, Hibernate的配置文件的时候,有时候XML编辑器的智能提示并不好用。造成这个问题的主要原因是,编辑器是从XML头部的网络地址来读取DTD或者XSD文件,比如头部命名空间的http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 这些文件是用来说明XML文件格式的,解析了这些文件,编辑器原创 2012-12-19 19:55:22 · 20493 阅读 · 2 评论 -
在使用C#调用COM组件操作Excel的时候阻止其他程序对此文件操作
在一个WinForm程序中调用COM组件操作一个已经存在的Excel文件的过程中,如果这个过程很长的话,比如说需要20分钟,而在这过程中,如果人为的去点击这个Excel文件的话,这个文件还是能够被打开的,但是同时WinForm程序那边就会报错。现在的业务需求是,在调用COM组件操作某个Excel的过程中,用户双击这个Excel是会给出文件正在被使用中的提示。如果是一个进程打开所有的Excel文件,原创 2012-12-19 13:34:02 · 1814 阅读 · 0 评论 -
AOP面向切面编程(一)
在这一篇博客,主要介绍AOP面向切面编程基础,为什么需要面向切面编程。通过一个简单的程序来实现,这次依然使用的是模拟Spring时的项目架构,项目代码可以参见点击打开链接这篇博客。这是一个使用Spring容器作为bean管理的项目。1、现在的业务需求是,要求在向数据库保存用户的时候,这一动作前后都要有时间上的日志记录。如果有项目源码的话,可以在源码直接加入逻辑,到达想要的效果。publ原创 2012-12-24 20:05:17 · 2937 阅读 · 1 评论 -
AOP面向切面编程(三)
对任意的对象、任意的接口方法,实现任意的代理,这时可以通过InvocationHandler实现public interface InvocationHandler { public void invoke(Object o, Method m);}public class TimeHandler implements InvocationHandler{ private Obj原创 2013-01-26 22:09:01 · 808 阅读 · 0 评论 -
AOP面向切面编程(二) 动态代理
一个项目中有10个类包括Tank, Car, Truck等,这些类都实现了Moveable,并且有Move方法。public interface Moveable { void move();}public class Tank implements Moveable { @Override public void move() { System.out.println("原创 2013-01-26 21:51:10 · 1875 阅读 · 0 评论 -
更改Visual Studio 2010的主题设置
Visual Studio 2010发布也已经有一段时间了,不过安装后默认的白底的主题长时间看代码可能会感觉眼睛酸痛,况且时间长了我们也希望能够换换口味,studiostyles这家主题网站则专门给我们提供了不同口味的Visual Studio主题样式,比如评分比较高的Son of Obsidian就是一款暗色调背景的主题,安装后将不会感觉到原来自带的那种白底界面的刺眼,可以有效的辅助我们长时转载 2013-02-18 14:47:48 · 1879 阅读 · 0 评论 -
WinForm程序中多线程与Timer的结合使用
在一个用户界面中,要求用户提供一个Excel文件的地址,用户界面如下。当选择好文件后,点击Next按钮后,系统会检查提供的Excel文件的可用性,会调用COM组件分析这个Excel的layout等,如果通过了就切换到另一个Form,如果没有的话就提示用户重新选择。如果这个过程时间很长的话,就会造成用户界面的假死现象,没有任何动静。所以,一般会在Form中用一个正在等待的GIF图片提示用原创 2013-03-04 08:53:59 · 12841 阅读 · 1 评论 -
MyEclipse使用注解的时候输入@没有智能提示的问题
在使用Myeclipse的时候,默认情况下输入@是没有智能提示的,此时你按下Alt+\就会有提示。如果你希望输入@后就有提示,那么可以到myeclipse中的Preferrences中去设置。搜索content找到相应的选项卡。作如下的操作原创 2013-03-07 11:04:47 · 3254 阅读 · 0 评论 -
VSTO向Excel单元格写入Date类型
C#向Excel中写入Date时候,会自动转换成Excel的Date类型。Range range = ...; range = System.DateTime.Now; 如果用这种方式赋值的话,虽然自动转换成了Excel的Date类型,但是实质上你会看到在Excel中显示的是double类型的一个值。因为在Excel中本质上Date是以double类型存在的,是从1900年1月0日到系统当前日期之原创 2013-03-13 16:18:10 · 2978 阅读 · 0 评论 -
C#操作Excel的OLEDB方式与COM方式比较
在对Excel进行读写操作时,使用微软自身提供的解决方案,有两种,分别是OLEDB方式和调用COM组件的方式1. OLEDB方式用这种方法读取Excel速度相对调用COM组件来讲是非常的快的,因为OLEDB方式就是把Excel当做一个数据库来操作的,将Excel作为一个数据源,直接用Sql语句获取数据。还有一个优点就是不需要安装Office Excel就可以使用。但是这种方式就是只能读取或原创 2013-03-14 15:45:01 · 6504 阅读 · 2 评论 -
C#模拟拦截器的实现
在SSH项目开发的过程中,Struts中大部分的功能是通过拦截器实现的。从编程思想上讲,拦截器也是AOP的实现。这里通过C#代码来模拟一个简单的拦截器。首先来看一段代码,这段代码是一段错误代码,因为会陷入无穷的循环调用中public class A{ B b = new B(); public void invoke() { b.Method(this); }}pub原创 2013-03-15 13:08:06 · 9578 阅读 · 0 评论 -
C#三种模拟自动登录和提交POST信息的实现方法
网页自动登录(提交Post内容)的用途很多,如验证身份、程序升级、网络投票等,以下是用C#实现的方法。网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。以下就分别用这三种方法来实现: 1、WebBrowser是个"迷你"浏览转载 2013-03-15 16:35:35 · 2890 阅读 · 0 评论 -
自定义实现Json字符串向C#对象的转变
这里使用Atrribute的方式实现了Json字符串向C#对象的转变。因为功能局限,此版本只是针对于Json字符串,如"response":"Hello","id":21231513,"result":100,"msg":"OK."; 而不是Json数组。这里的Atrribute是作用在属性上,像NHibernate中的Atrribute一样,是在运行时通过反射来获取这个属性对应于Json字符串中原创 2013-03-18 09:57:59 · 5328 阅读 · 0 评论