<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>工程 on 111qqz's blog</title><link>https://111qqz.com/en/categories/%E5%B7%A5%E7%A8%8B/</link><description>Recent content in 工程 on 111qqz's blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2015-2026 111qqz</copyright><lastBuildDate>Sat, 10 Dec 2022 18:04:41 +0800</lastBuildDate><atom:link href="https://111qqz.com/en/categories/%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>【施工中】gitlab ci docker executor指定用户执行</title><link>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2022-12-10-specify-user-to-run-docker-executor-in-gitlab-ci/</link><pubDate>Sat, 10 Dec 2022 18:04:41 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2022-12-10-specify-user-to-run-docker-executor-in-gitlab-ci/</guid><description>&lt;h1 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;需要在gitlab &lt;a href="https://docs.gitlab.com/ee/ci/pipelines/" target="_blank" rel="noreferrer"&gt;pipelines&lt;/a&gt;中跑一堆测试
其中某些测试需要与rancher交互，在训练集群上执行一个训练任务&lt;/p&gt;</description></item><item><title>浅谈 Cpp Value Categories</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</link><pubDate>Tue, 12 Apr 2022 21:39:31 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;每一个cpp expression都有一个type 和 value category 属性
前者大家都比较了解，但是后者却常常被忽视&lt;/p&gt;</description></item><item><title>redis学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2022-04-08-redis-notes/</link><pubDate>Fri, 08 Apr 2022 10:53:16 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2022-04-08-redis-notes/</guid><description>&lt;p&gt;最近在做一个智能算力的项目，其中需要用到redis维护某个全局的时间窗口&lt;/p&gt;</description></item><item><title>[施工中] levelDB 代码阅读笔记 06 iterator</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-26-reading-leveldb-code-06/</link><pubDate>Sat, 26 Mar 2022 16:48:54 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-26-reading-leveldb-code-06/</guid><description>&lt;h2 class="relative group"&gt;接口
 &lt;div id="接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;一个ABC，后面会继承这个类做各种实现&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 05 arena</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-20-reading-leveldb-code-05/</link><pubDate>Sun, 20 Mar 2022 17:23:18 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-20-reading-leveldb-code-05/</guid><description>&lt;p&gt;arena时levelDB中的内存池实现&lt;/p&gt;

&lt;h2 class="relative group"&gt;接口
 &lt;div id="接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;没有太多好说的，都非常直观。 补了些注释&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 04 filter</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-12-reading-leveldb-code-04/</link><pubDate>Sun, 13 Mar 2022 07:55:17 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-12-reading-leveldb-code-04/</guid><description>&lt;h2 class="relative group"&gt;FilterPolicy接口
 &lt;div id="filterpolicy接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#filterpolicy%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LEVELDB_EXPORT&lt;/span&gt; &lt;span class="n"&gt;FilterPolicy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;FilterPolicy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Return the name of this policy. Note that if the filter encoding
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// changes in an incompatible way, the name returned by this method
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// must be changed. Otherwise, old incompatible filters may be
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// passed to methods of this type.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// keys[0,n-1] contains a list of keys (potentially with duplicates)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// that are ordered according to the user supplied comparator.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Append a filter that summarizes keys[0,n-1] to *dst.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Warning: do not change the initial contents of *dst. Instead,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// append the newly constructed filter to *dst.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;CreateFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// &amp;#34;filter&amp;#34; contains the data appended by a preceding call to
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// CreateFilter() on this class. This method must return true if
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// the key was in the list of keys passed to CreateFilter().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// This method may return true or false if the key was not on the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// list, but it should aim to return false with a high probability.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;KeyMayMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;其中CreateFilter的含义是从n个key生成一个 std::string. 生成的std::string可以包含n个key的信息(类似于生成了一个全集) 从而后续判断某个key是否在其中。&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 03 cache</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-06-reading-leveldb-code-03/</link><pubDate>Sun, 06 Mar 2022 17:20:59 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-06-reading-leveldb-code-03/</guid><description>&lt;h2 class="relative group"&gt;Cache接口
 &lt;div id="cache接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cache%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;没有太多好说的，可以注意这里用了void*来表示任意类型数据。 在c++17之后可以考虑用std::any代替，参考 &lt;a href="https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/" &gt;std::any 笔记&lt;/a&gt;&lt;/p&gt;</description></item><item><title>std::shared_ptr 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</link><pubDate>Sat, 05 Mar 2022 16:33:25 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</guid><description>&lt;h2 class="relative group"&gt;概述
 &lt;div id="概述" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%bf%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;std::shared_ptr是智能指针的一种，在modern c++中被广泛使用（&lt;del&gt;甚至滥用&lt;/del&gt;)&lt;/p&gt;</description></item><item><title>[c++17] std::any 笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</link><pubDate>Sat, 05 Mar 2022 16:02:36 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;一种很常见的背景是，需要表示未知类型的数据。 比如可能是用户提供的数据，比如是一个Cache的实现， value想支持任意类型的数据&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 02 comparator</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-01-reading-leveldb-code-02/</link><pubDate>Tue, 01 Mar 2022 20:01:50 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-01-reading-leveldb-code-02/</guid><description>&lt;p&gt;levelDB是一个有序的KV存储，因此key的顺序是十分关键的
levelDB提供用户自己定义key顺序的能力&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 01 db.h</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-02-26-reading-leveldb-code-01/</link><pubDate>Sat, 26 Feb 2022 19:10:30 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-02-26-reading-leveldb-code-01/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在做一个智能算力相关的项目，类似&lt;a href="https://tech.meituan.com/2021/06/17/waimai-ai-advertisement.html" target="_blank" rel="noreferrer"&gt;美团外卖广告智能算力的探索与实践&lt;/a&gt;
其中实现控制系统需要与数据库交互。 虽然最后技术选型并没有使用到levelDB,但是想趁机把代码读了吧。&lt;/p&gt;</description></item><item><title>ska::flat_hash_map 源码分析</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-08-21-ska-flat-hash-map-notes/</link><pubDate>Sat, 21 Aug 2021 17:43:02 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-08-21-ska-flat-hash-map-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在调研各种hashmap..
发现ska::flat hash map性能优秀。。于是来看看代码。。
发现最大的特点是,ska::flat_hash_map使用了带probe count上限的robin hood hashing&lt;/p&gt;</description></item><item><title>一次avx2在gcc上core dump的排查经历</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-07-22-debugging-avx2-on-gcc4/</link><pubDate>Thu, 22 Jul 2021 20:01:50 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-07-22-debugging-avx2-on-gcc4/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;起因是同事在实现int4的功能，结果流水线有一条死活过不了(gcc版本为4.8.5),一直core dump
经过初步排查，找出了如下最小可以复现的代码:&lt;/p&gt;</description></item><item><title>k8s nodes is forbidden user cannot list resource nodes in api group at the cluster scope</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2020-05-07-install-k8s-nodes-forbidden-error/</link><pubDate>Thu, 07 May 2020 16:01:52 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2020-05-07-install-k8s-nodes-forbidden-error/</guid><description>&lt;p&gt;继续将k8s用于模型转换和部署的自动化流程&amp;hellip;然后发现之前安装k8s的文档不work了．．
时间是2020年5月7日，当前最新的k8s版本是　v1.18.2&lt;/p&gt;</description></item><item><title>tensorRT 模型兼容性说明</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-03-24-tensorrt-model-compatibility-notes/</link><pubDate>Tue, 24 Mar 2020 12:26:01 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-03-24-tensorrt-model-compatibility-notes/</guid><description>&lt;h2 class="relative group"&gt;名词说明
 &lt;div id="名词说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%90%8d%e8%af%8d%e8%af%b4%e6%98%8e" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CUDA. 一般来说指的是CUDA SDK. 目前经常使用的是CUDA 8.0和CUDA 10.1两个版本. 8.0和10.1都是SDK的版本号.&lt;/li&gt;
&lt;li&gt;CUDNN. The NVIDIA CUDA® Deep Neural Network library (cuDNN). 是一个可以为神经网络提供GPU加速的库&lt;/li&gt;
&lt;li&gt;compute capability. 是GPU的固有参数,可以理解为GPU的版本.越新的显卡该数值往往越高.&lt;/li&gt;
&lt;li&gt;tensorRT.NVIDIA TensorRT™ is an SDK for high-performance deep learning inference. 是一个深度学习推理库,旨在提供高性能的推理速度.&lt;/li&gt;
&lt;li&gt;plan file,也称为 engine plan. 是生成的tensorRT 模型文件.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;兼容性说明
 &lt;div id="兼容性说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%bc%e5%ae%b9%e6%80%a7%e8%af%b4%e6%98%8e" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Engine plan 的兼容性依赖于GPU的compute capability 和 TensorRT 版本, 不依赖于CUDA和CUDNN版本.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>x86 calling conventions</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/6.828/2019-01-31-x86-calling-conventions/</link><pubDate>Thu, 31 Jan 2019 12:12:22 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/6.828/2019-01-31-x86-calling-conventions/</guid><description>&lt;p&gt;x86的调用约定主要说的是这几件事:&lt;/p&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;The order in which atomic (scalar) parameters, or individual parts of a complex parameter, are allocated&lt;/li&gt;
&lt;li&gt;How parameters are passed (pushed on the stack, placed in registers, or a mix of both)&lt;/li&gt;
&lt;li&gt;Which registers the called function must preserve for the caller (also known as: callee-saved registers or non-volatile registers)&lt;/li&gt;
&lt;li&gt;How the task of preparing the stack for, and restoring after, a function call is divided between the caller and the callee&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;p&gt;调用约定实际上并不唯一&lt;/p&gt;</description></item><item><title>优化学习笔记(1):Loop unrolling</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2019-01-23-loop-unrolling/</link><pubDate>Wed, 23 Jan 2019 11:51:46 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2019-01-23-loop-unrolling/</guid><description>&lt;p&gt;&lt;del&gt;迫于生计，&lt;/del&gt;最近要学习&lt;a href="http://halide-lang.org/" target="_blank" rel="noreferrer"&gt;halide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;先去学习/复习一下常见的编译优化技巧。&lt;/p&gt;
&lt;p&gt;loop unrolling，也就是循环展开，顾名思义，就是把循环展开来写。&lt;/p&gt;</description></item><item><title>docker network 与 本地 network 网段冲突</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2018-11-20-docker-network-conflict-with-local-subnetwork/</link><pubDate>Tue, 20 Nov 2018 08:33:20 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2018-11-20-docker-network-conflict-with-local-subnetwork/</guid><description>&lt;h3 class="relative group"&gt;起因:
 &lt;div id="起因" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%b5%b7%e5%9b%a0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;公司部署在hk的爬虫服务器突然挂掉了。后来发现只是在深圳办公区无法访问。排查后发现原因是docker的网络(包括docker network的subnet或者是某个容器的ip)与该host在内网的ip段相同，导致冲突。&lt;/p&gt;</description></item><item><title>记一次在 docker compose 中使用volume的踩坑记录</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2018-11-14-docker-compose-default-volume-name-makes-me-confused/</link><pubDate>Wed, 14 Nov 2018 08:06:57 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2018-11-14-docker-compose-default-volume-name-makes-me-confused/</guid><description>&lt;h3 class="relative group"&gt;现象:
 &lt;div id="现象" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%8e%b0%e8%b1%a1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;使用docker compose 挂载 named volume 无效（且没有错误提示)&lt;/p&gt;</description></item><item><title>java-grpc 踩坑记录</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-17-java-grpc-notes/</link><pubDate>Wed, 17 Oct 2018 03:29:03 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-17-java-grpc-notes/</guid><description>&lt;p&gt;最近的项目需要java和python之间的进程通信，想到了之前使用过的的grpc.&lt;/p&gt;</description></item><item><title>spring 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-10-spring-notes/</link><pubDate>Wed, 10 Oct 2018 09:56:46 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-10-spring-notes/</guid><description>&lt;p&gt;迫于生计，又要从零开始学习spring.&lt;/p&gt;
&lt;p&gt;在这篇文章之前，对java的基础是2015年写过一个java大作业，对spring是一无所知。&lt;/p&gt;</description></item><item><title>spring 依赖注入</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-09-spring-dependency-injection/</link><pubDate>Tue, 09 Oct 2018 07:45:17 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-10-09-spring-dependency-injection/</guid><description>&lt;p&gt;真是个不明觉厉的术语&amp;hellip;其实是个特别简单的概念orz&lt;/p&gt;</description></item><item><title>[c++11] std::async std::packaged_task std::promise and std::future notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-30-async-packaged-ask-promise-future-notes/</link><pubDate>Sun, 30 Sep 2018 06:49:27 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-30-async-packaged-ask-promise-future-notes/</guid><description>&lt;p&gt;把std::async,std::packaged_task,std::promise三个放在一起来说,是因为他们都可以返回一个std::future对象.简单来说,当某个线程需要等待一个特定的一次性事件(one-off event),它可以用一个&amp;quot;future&amp;quot;来表示这个事件.&lt;/p&gt;</description></item><item><title>[C++11]std::condition_variable notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-23-condition_variable-notes/</link><pubDate>Sun, 23 Sep 2018 08:42:33 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-23-condition_variable-notes/</guid><description>&lt;blockquote&gt;&lt;p&gt;condition_variable 类是同步原语，能用于阻塞一个线程，或同时阻塞多个线程，直至另一线程修改共享变量（条件）并通知 condition_variable 。&lt;/p&gt;</description></item><item><title>std::call_once &amp;&amp; std::once_flag notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-20-call_once-once_flag-notes/</link><pubDate>Thu, 20 Sep 2018 12:47:46 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-20-call_once-once_flag-notes/</guid><description>&lt;p&gt;多线程保护数据时，一种较为特殊的情况是只需要保护资源的初始化。&lt;/p&gt;</description></item><item><title>react 中setState的更新策略</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-18-react-setstate-update-strategy/</link><pubDate>Tue, 18 Sep 2018 13:31:06 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-18-react-setstate-update-strategy/</guid><description>&lt;p&gt;起因是想更新一个array类型的state,结果setState更新之后用console.log() debug 结果，发现结果特别玄学。。。&lt;/p&gt;</description></item><item><title>learn java in 21 minutes for C++ Programmers</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-09-10-learn-java-in-21-minutes-for-c-programmers/</link><pubDate>Mon, 10 Sep 2018 11:53:31 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/java/2018-09-10-learn-java-in-21-minutes-for-c-programmers/</guid><description>&lt;p&gt;先放资料:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pages.cs.wisc.edu/~hasti/cs368/JavaTutorial/" target="_blank" rel="noreferrer"&gt;Learning a New Programming Language: Java for C++ Programmers&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;java package
 &lt;div id="java-package" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#java-package" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;先说几条重要的人话:&lt;/p&gt;</description></item><item><title>[施工中][c++11] move semantics &amp;&amp; perfect forwarding 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-move-semantic-perfect-forward-notes/</link><pubDate>Sun, 09 Sep 2018 13:01:45 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-move-semantic-perfect-forward-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;move semantics是modern cpp中非常重要的特性，有必要详细了解一下。&lt;/p&gt;</description></item><item><title>[C++11 ] std::ref&amp;&amp;std::reference_wrapper notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-reference_wrapper-notes/</link><pubDate>Sun, 09 Sep 2018 11:28:53 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-reference_wrapper-notes/</guid><description>&lt;p&gt;起因是在看《CplusplusConcurrencyInAction_PracticalMultithreading》的时候，里面讲到初始化std::thread的时候，如果thread funtion的参数列表中有引用，需要传入std::ref才可以得到符合预期的结果。&lt;/p&gt;</description></item><item><title>前端To do list</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-06-front-end-to-do-list/</link><pubDate>Thu, 06 Sep 2018 09:56:57 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-06-front-end-to-do-list/</guid><description>&lt;p&gt;20181014update: 可以不写了，开心&lt;/p&gt;
&lt;p&gt;迫于生计，要从零开始学习前端。&lt;/p&gt;
&lt;p&gt;由于之前的to do list 年代久远+ 前端的技术栈可之前几乎没有关系，因此新开一篇记录。&lt;/p&gt;</description></item><item><title>typescript学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-05-typescript-notes/</link><pubDate>Wed, 05 Sep 2018 08:02:42 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-09-05-typescript-notes/</guid><description>&lt;p&gt;先放参考资料:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ts.xcatliu.com/" target="_blank" rel="noreferrer"&gt;TypeScript 入门教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.typescriptlang.org/docs/handbook/react-&amp;amp;-webpack.html" target="_blank" rel="noreferrer"&gt;React &amp;amp; Webpack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/sw-yx/react-typescript-cheatsheet/blob/master/README.md" target="_blank" rel="noreferrer"&gt;react-typescript-cheatsheet &lt;/a&gt;(强推一波，讲了很多react+ts的实践）&lt;/p&gt;</description></item><item><title>[设计模式] 观察者( Observer )模式学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-01-observer-pattern-notes/</link><pubDate>Sat, 01 Sep 2018 09:27:40 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-01-observer-pattern-notes/</guid><description>&lt;p&gt;最近在学习node.js，里面讲到node.js的事件机制使用了观察者模式，因此来学习一下。&lt;/p&gt;</description></item><item><title>Redux 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-30-redux-notes/</link><pubDate>Thu, 30 Aug 2018 12:05:35 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-30-redux-notes/</guid><description>&lt;p&gt;Redux是Flux架构的一种实现。&lt;/p&gt;
&lt;p&gt;至于Flux架构是什么，可以参考&lt;a href="http://www.ruanyifeng.com/blog/2016/01/flux.html" target="_blank" rel="noreferrer"&gt;Flux 架构入门教程&lt;/a&gt;&lt;/p&gt;</description></item><item><title>JavaScript 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-30-javascript-notes/</link><pubDate>Thu, 30 Aug 2018 03:42:19 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-30-javascript-notes/</guid><description>&lt;p&gt;&lt;del&gt;暂时没空从头开始搞&amp;hellip;用到哪里先记录一下好了orz&lt;/del&gt;&lt;/p&gt;</description></item><item><title>react学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-28-front_end-react-notes/</link><pubDate>Tue, 28 Aug 2018 10:16:16 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%89%8D%E7%AB%AF/2018-08-28-front_end-react-notes/</guid><description>&lt;p&gt;首先介绍一个fb家的快速开发react的工具 &lt;a href="https://github.com/facebook/create-react-app" target="_blank" rel="noreferrer"&gt;create-react-app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个东西依赖node6.0或者更高版本。&lt;/p&gt;</description></item><item><title>[C++11] promise &amp;&amp; future leanrning notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-23-c11-promise-future-notes/</link><pubDate>Thu, 23 Aug 2018 02:45:53 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-23-c11-promise-future-notes/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="std::promise / std::future（根据正文上下文重绘的示例图，并非遗失原图）"
 src="https://111qqz.com/images/generated/missing/026-promise-future.svg"
 &gt;&lt;/figure&gt;
&lt;p&gt;用人话就是，主线程传给附属线程一个promise Object,然后主线程想要获取附属线程set给promise Object的值（也就是该线程返回的某个结果），需要通过主线程中的promise object 得到对应的future object(每个promise 对应一个 future),然后调用future 的get方法。如果附属线程没有执行作为参数传入的promise的set方法去返回结果，那么程序就会block住。&lt;/p&gt;</description></item><item><title>把二进制文件按字节读到vector中</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-21-how-to-read-binary-data-into-cpp-vector/</link><pubDate>Tue, 21 Aug 2018 06:08:56 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-21-how-to-read-binary-data-into-cpp-vector/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;readFromFile1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 获取文件大小，尽量一次读完
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getFileSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSize&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 在读取过程当中，有可能文件大小有变化，再尝试读取
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(;;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;另外一种C++风格，但是性能较差的方法：&lt;/p&gt;</description></item><item><title>boost:property_tree 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-20-boost_property_tree-notes/</link><pubDate>Mon, 20 Aug 2018 08:10:16 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-20-boost_property_tree-notes/</guid><description>&lt;p&gt;先放资料:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://zenol.fr/blog/boost-property-tree/en.html" target="_blank" rel="noreferrer"&gt;How to use boost::property_tree to load and write JSON&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/4586768/how-to-iterate-a-boost-property-tree" target="_blank" rel="noreferrer"&gt;How to iterate a boost property tree?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不出现key的方法遍历一个json文件:&lt;/p&gt;</description></item><item><title>记录一次因动态库符号表可见性导致的未定义的引用(undefined reference)</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-15-undefined-references-caused-by-dynamic-library-symbol-table-visibility/</link><pubDate>Wed, 15 Aug 2018 13:12:17 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-15-undefined-references-caused-by-dynamic-library-symbol-table-visibility/</guid><description>&lt;p&gt;编译某代码，发现报错某函数未定义的引用。该函数的是先前编译得到的动态库中。&lt;/p&gt;</description></item><item><title>c++11 function 与bind 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-19-cpp11-function-bind-notes/</link><pubDate>Thu, 19 Jul 2018 10:46:26 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-19-cpp11-function-bind-notes/</guid><description>&lt;p&gt;C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可
以调用的目标实体进行存储、复制和调用操作&lt;/p&gt;</description></item><item><title>C++ 记录代码运行时间</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-10-record-code-run-time-with-cpp/</link><pubDate>Tue, 10 Jul 2018 02:26:50 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-10-record-code-run-time-with-cpp/</guid><description>&lt;p&gt;以前用的办法太老土啦&lt;/p&gt;
&lt;p&gt;看到一个since C++11的方法，我觉得比较优雅&lt;/p&gt;</description></item><item><title>gdb学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-06-gdb-notes/</link><pubDate>Fri, 06 Jul 2018 07:44:38 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-06-gdb-notes/</guid><description>&lt;p&gt;用gdb调试c++的时候，需要添加-g编译选项add_compile_options(-g)，并且关掉各种编译优化&lt;/p&gt;</description></item><item><title>C++ STL Algotithms 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-06-cpp-stl-algotithms-notes/</link><pubDate>Sun, 06 May 2018 09:45:50 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-06-cpp-stl-algotithms-notes/</guid><description>&lt;p&gt;迫于拙劣的cpp水平，这次来记录一些关于STL算法部分的内容。&lt;/p&gt;</description></item><item><title>C++ IO Streams 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-04-cpp-io-streams-notes/</link><pubDate>Fri, 04 May 2018 03:48:37 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-04-cpp-io-streams-notes/</guid><description>&lt;p&gt;迫于拙劣的cpp水平，来补补以前忽略掉的cpp细节。&lt;/p&gt;
&lt;p&gt;老规矩，先放资料。&lt;/p&gt;</description></item><item><title>levelDB 使用笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2018-04-19-leveldb-notes/</link><pubDate>Thu, 19 Apr 2018 15:58:40 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2018-04-19-leveldb-notes/</guid><description>&lt;p&gt;2022-02-26 update:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;说学习笔记听起来像在分析代码。。。但是实际上什么都没干，还是写&amp;quot;使用笔记&amp;quot;好了&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>cmake 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-03-18-cmake-notes/</link><pubDate>Sun, 18 Mar 2018 10:27:26 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-03-18-cmake-notes/</guid><description>&lt;p&gt;前置技能点：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.gnu.org/software/make/" target="_blank" rel="noreferrer"&gt;gnu make&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/linux/2018-03-17-linux-static-and-shared-libraries/" &gt;linux下.so,.a,.o文件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cmake是一个工具，也可以看成一门语言。&lt;/p&gt;</description></item><item><title>CUDA C Best Practices Guide 阅读笔记（二） Heterogeneous Computing</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-13-cuda-c-best-practices-guide-heterogeneous-computing/</link><pubDate>Tue, 13 Feb 2018 06:38:38 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-13-cuda-c-best-practices-guide-heterogeneous-computing/</guid><description>&lt;p&gt;CUDA 编程涉及到在不同的平台上同时运行代码:包含CPU的host 和包含GPU的device.&lt;/p&gt;</description></item><item><title>cuda c++ 基础算法库 thrust 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-10-cuda-thrust-notes/</link><pubDate>Sat, 10 Feb 2018 08:43:54 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-10-cuda-thrust-notes/</guid><description>&lt;p&gt;可以了解成并行版的STL(?&lt;/p&gt;
&lt;p&gt;过了一遍&lt;a href="http://docs.nvidia.com/cuda/thrust/index.html" target="_blank" rel="noreferrer"&gt;nvidia的官方网文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;发现如果熟悉STL的话,thrust没什么太多好说的,看起来很简单&amp;hellip;&lt;/p&gt;</description></item><item><title>cuda error checking 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-09-cuda-error-checking-notes/</link><pubDate>Fri, 09 Feb 2018 06:55:00 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-09-cuda-error-checking-notes/</guid><description>&lt;p&gt;由于发现cuda c++ 的 debug方式和c++ 差别很大,因此打算再开一篇,专门记录一些和error checking 以及debug有关的内容.&lt;/p&gt;</description></item><item><title>cuda 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-01-cuda-notes/</link><pubDate>Thu, 01 Feb 2018 07:20:04 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-01-cuda-notes/</guid><description>&lt;p&gt;uodate:有毒吧。kernel中出问题原来是不会报错的。。。。&lt;/p&gt;</description></item></channel></rss>