<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[okkk的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/okkk</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; okkk]]></copyright><item><title><![CDATA[PBC【Packaged Business Capabilities】的理解]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/122041466</link><guid>https://blog.youkuaiyun.com/okkk/article/details/122041466</guid><author>okkk</author><pubDate>Mon, 20 Dec 2021 16:15:45 +0800</pubDate><description><![CDATA[PCB概念介绍]]></description><category></category></item><item><title><![CDATA[提取目录下文件名]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/120432723</link><guid>https://blog.youkuaiyun.com/okkk/article/details/120432723</guid><author>okkk</author><pubDate>Thu, 23 Sep 2021 12:47:23 +0800</pubDate><description><![CDATA[@echo off

cd.&gt;ListDirAndFile.txt

for /d %%i in (*) do (
echo %%i
echo %%i &gt;&gt; ListDirAndFile.txt
)
echo.
for %%i in (*) do (
if "%%i" == "%~nx0" (
echo.
) else if "%%i" == "ListDirAndFile.bat" (
echo.
) else (
echo %%i &gt;&gt; ListDirAn...]]></description><category></category></item><item><title><![CDATA[async  await 模式下的lock逻辑]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/110551072</link><guid>https://blog.youkuaiyun.com/okkk/article/details/110551072</guid><author>okkk</author><pubDate>Thu, 03 Dec 2020 18:02:52 +0800</pubDate><description><![CDATA[原生的lock作用域中，不能使用async,await关键词。

但高性能程序中lock逻辑大量存在，这里使用dispose接口支持的using逻辑，实现一个替代的lock逻辑：



public class NameTaskLock
 {
  static NameTaskLock m_only = new NameTaskLock();
  public static NameTaskLock Current { get { return m_only; } }
  public cl...]]></description><category></category></item><item><title><![CDATA[NET Core aync await任务模型的劣化问题]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/105768169</link><guid>https://blog.youkuaiyun.com/okkk/article/details/105768169</guid><author>okkk</author><pubDate>Sun, 26 Apr 2020 14:38:35 +0800</pubDate><description><![CDATA[在写测试用例时，顺手做了一个TASK模型的压力测试。发现TASK模型的性能极其低下！

数据处理逻辑：

    1：主程序不停发送数据修改命令

    2：数据管理器，接收命令，缓存命令。

    3：后台线程分批次处理，一次处理一批命令，按照命令内容读写数据，修改文件。

    4：完成后， 调用Task.Start函数，让等候该批次任务的命令执行后续操作...]]></description><category></category></item><item><title><![CDATA[MYSQL伪随机排序]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/104021731</link><guid>https://blog.youkuaiyun.com/okkk/article/details/104021731</guid><author>okkk</author><pubDate>Fri, 17 Jan 2020 16:44:04 +0800</pubDate><description><![CDATA[MYSQL支持RAND函数进行随机排序。

但我们需要对指定用户，排序是固定的。

这时需要使用用户名为排序参数，进行排序：



SELECT * from myTableName ORDER BY RAND(conv(CONVERT(MD5('我名字'),CHAR(12)),16,10))
...]]></description><category></category></item><item><title><![CDATA[JS 异步调用转 同步调用。]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/103109799</link><guid>https://blog.youkuaiyun.com/okkk/article/details/103109799</guid><author>okkk</author><pubDate>Sun, 17 Nov 2019 16:13:58 +0800</pubDate><description><![CDATA[var SuncCallTime = 30*1000;//同步调用最大等待时间。
 //同步请求数据----&gt;会导致浏览器被锁死。慎用!!!!
 function JSONPSync(url){
  var dataWaiting = null;

  AjaxScriptLoad(url,function(data){
   if(data == null)
   ...]]></description><category></category></item><item><title><![CDATA[HTML动态公式计算]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/90169083</link><guid>https://blog.youkuaiyun.com/okkk/article/details/90169083</guid><author>okkk</author><pubDate>Mon, 13 May 2019 10:56:45 +0800</pubDate><description><![CDATA[在属性动态变化，公式动态变化的情况下使用:


&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;script type="text/javascript"&gt;
    var tJSON = {
      长: 12,
      高: 34,
      宽: 0.34,
      密度: 3.45,
      体积...]]></description><category></category></item><item><title><![CDATA[简单屏蔽广告]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/83501652</link><guid>https://blog.youkuaiyun.com/okkk/article/details/83501652</guid><author>okkk</author><pubDate>Mon, 29 Oct 2018 10:16:22 +0800</pubDate><description><![CDATA[网络广告真真真的很烦人。 特别是一些网站毫无底线，页面70%的内容都是广告！！！

 认证分析发现，大部分广告都是百度，cnzz,google等企业发出来的。 网站原生的广告系统往往比较规矩，还可以接受。屏蔽百度，google等大厂的广告服务器，就可以避免大部分的广告，并且对网页功能影响很小。

 下面为搜集的广告服务器地址，主要屏蔽跨站js文件。放在路由器的静态路由表上，可以让整个局域网...]]></description><category></category></item><item><title><![CDATA[Express学习留存.]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/82117280</link><guid>https://blog.youkuaiyun.com/okkk/article/details/82117280</guid><author>okkk</author><pubDate>Mon, 27 Aug 2018 18:31:49 +0800</pubDate><description><![CDATA[static unsafe void Main(string[] args)
        {
            //参数
            var dic = Expression.Parameter(typeof(Dictionary&amp;lt;string, string&amp;gt;), &quot;dic&quot;);
            var pa = Expression.Parameter...]]></description><category></category></item><item><title><![CDATA[BOM头识别文件类型。]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/80362600</link><guid>https://blog.youkuaiyun.com/okkk/article/details/80362600</guid><author>okkk</author><pubDate>Fri, 18 May 2018 12:10:56 +0800</pubDate><description><![CDATA[在JAVA读取文件时需要处理文件的BOM头。 HTTP服务器端，读取客户端上传文件时，也需要解析BOM头。  --注意使用windowsAPI读取文件时，BOM头会自动去掉。1、从Ultra－edit-32中提取出来的 JPEG (jpg)，文件头：FFD8FF PNG (png)，文件头：89504E47 GIF (gif)，文件头：47494638 TIFF (tif)，文件头：49492A0...]]></description><category></category></item><item><title><![CDATA[Socket的ReceiveAsync和SendAsync变成Task<int>]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/80111913</link><guid>https://blog.youkuaiyun.com/okkk/article/details/80111913</guid><author>okkk</author><pubDate>Fri, 27 Apr 2018 19:51:28 +0800</pubDate><description><![CDATA[在无阻塞环境，Socket的SendAsync和ReceiveAsync显得特别另类。他们返回的不是Task而是bool 值。为了与开发环境兼容【其实就是为了使用ContinueWith】，需要将他们封装，返回为Task&amp;lt;int&amp;gt;.

以下为转换函数:


public class SocketTokenInfo
    {
        public static int Sock...]]></description><category></category></item><item><title><![CDATA[C#操作巨型文件]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/79932877</link><guid>https://blog.youkuaiyun.com/okkk/article/details/79932877</guid><author>okkk</author><pubDate>Fri, 13 Apr 2018 18:16:33 +0800</pubDate><description><![CDATA[.NET4.0支持文件内存映射了！System.IO.MemoryMappedFiles.MemoryMappedFile类名留存。]]></description><category></category></item><item><title><![CDATA[byte数组在异步环境下拼接为string---使用System.Text.Encoder]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/78847025</link><guid>https://blog.youkuaiyun.com/okkk/article/details/78847025</guid><author>okkk</author><pubDate>Tue, 19 Dec 2017 20:32:00 +0800</pubDate><description><![CDATA[将字节数组转化为string非常简单  Encoding.GetString(byte[])即可。
但在stream环境中，缓冲区会出现截断字符的情况。
这时需要使用System.Text.Encoder来构造字符串。在其内部会自动缓存被截断的字符串，避免错误。




----记录类名，备用。]]></description><category></category></item><item><title><![CDATA[Noesis.Javascript中执行arttempllate读取运行错误]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/73195313</link><guid>https://blog.youkuaiyun.com/okkk/article/details/73195313</guid><author>okkk</author><pubDate>Tue, 13 Jun 2017 21:11:40 +0800</pubDate><description><![CDATA[使用Noesis.Javascript实现服务器端脚本，主要处理arttemplate模板的运行结果。
当arttemplate运行发生错误时，会出现无法抓取错误信息的情况。
这里使用类似hook的技术，拦截错误信息，以便于输出错误信息。
步骤1：在arttemplate.js中添加以下代码
     var console = {};
console.error = function (]]></description><category></category></item><item><title><![CDATA[端口重叠情况下Socket的创建与释放]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/54318204</link><guid>https://blog.youkuaiyun.com/okkk/article/details/54318204</guid><author>okkk</author><pubDate>Tue, 10 Jan 2017 22:10:12 +0800</pubDate><description><![CDATA[就一个Socket完成传输后重建的问题，被坑了整整两天。 在这里简单记录 一下。


为了完成NET穿透，在客户端我们用 TCPClient 使用随机端口号，创建一个到服务器的连接，然后在相同的端口上，再新建一个Socket，并在这个Socket上打开侦听，等待网络上，特别是公网上的连接。


公网上的服务器，为了支持浏览器访问，是一个long-pulling类型的信息交换服务，同时支]]></description><category></category></item><item><title><![CDATA[HTML，使用div+css实现自适应table布局]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/52074171</link><guid>https://blog.youkuaiyun.com/okkk/article/details/52074171</guid><author>okkk</author><pubDate>Sat, 30 Jul 2016 18:16:26 +0800</pubDate><description><![CDATA[简单的table布局：
    1：使用 box-sizing以便于使用100%;
    2:每个cell使用float:left,在行末尾使用 clear:both 以使整个行有高度和宽度
   3：使用margin,padding，保证一个单元格拥有最小高度。避免空的单元格。





div.table{  
    border:1px solid #000000;  
  ]]></description><category></category></item><item><title><![CDATA[生产者 消费者 --- 多线程 到 单线程 控制]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/51914582</link><guid>https://blog.youkuaiyun.com/okkk/article/details/51914582</guid><author>okkk</author><pubDate>Fri, 15 Jul 2016 09:10:37 +0800</pubDate><description><![CDATA[软件在处理IO任务时，需要使用多线程，提高效率。 但在资源准备好了以后，需要使用单线程，来简化控制逻辑，避免不必要的lock语句或原子代码。以下代码是C#中生产者消费者的一种变种使用方式，用于完成上诉任务。无守候线程，逻辑简单：：
/// 
    /// 生产，消费者 控制代码
    /// 生产者考虑为多线程.
    /// 消费者必须是单线程执行。
    /// 
    publi]]></description><category></category></item><item><title><![CDATA[ArtTemplet模板 参数传递  动态绑定]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/51719582</link><guid>https://blog.youkuaiyun.com/okkk/article/details/51719582</guid><author>okkk</author><pubDate>Mon, 20 Jun 2016 11:43:41 +0800</pubDate><description><![CDATA[测试模板:{{Name}}
        {{Item = QueryPage(20)}}
        {{ each Item as value i}}
          第 {{i}} 个值 {{value}}
        {{/each}}
        临时变量：{{myValue}}]]></description><category></category></item><item><title><![CDATA[HTML中 js执行环境切换]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/51315897</link><guid>https://blog.youkuaiyun.com/okkk/article/details/51315897</guid><author>okkk</author><pubDate>Wed, 04 May 2016 16:22:59 +0800</pubDate><description><![CDATA[在父窗体中，要把执行环境切换到iframe内部，使用 new Function,事件，Event等都会无效，执行环境始终会在父窗口中。


要切换环境需要把要执行的函数写到iframe内部的script标签：
var doc = iframe.contentWindow.document;

var head, headtag = doc.getElementsByTagName('h]]></description><category></category></item><item><title><![CDATA[HTML TextArea的值保存后显示错误问题。]]></title><link>https://blog.youkuaiyun.com/okkk/article/details/51315469</link><guid>https://blog.youkuaiyun.com/okkk/article/details/51315469</guid><author>okkk</author><pubDate>Wed, 04 May 2016 15:47:37 +0800</pubDate><description><![CDATA[使用TextArea.Value可以获得TextArea所显示的值。 
当Value里包含HTML标签，或HTML转义内容时，使用保存的值显示到TextArea时就是出现HTML解析错误特别是TextArea.value包含这样的内容时，会导致整个页面混乱。


处理办法，赋值到textarea前，对内容进行转义： 
 str = str..replace(/>/g, "&gt");]]></description><category></category></item></channel></rss>