<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blowing in the wind</title>
    <link>https://zheng-bobo.github.io/en/</link>
    <description>Recent content on Blowing in the wind</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 26 Sep 2026 23:00:00 +0200</lastBuildDate>

  <atom:link href="https://zheng-bobo.github.io/en/index.xml" rel="self" type="application/rss+xml" />


    <item>
      <title>A Field Guide to LLM and AI Agent Benchmarks</title>
      <link>https://zheng-bobo.github.io/en/post/llm-agent-benchmarks-guide/</link>
      <pubDate>Sat, 26 Sep 2026 23:00:00 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/llm-agent-benchmarks-guide/</guid>
      <description>&lt;p&gt;Model reports often list ARC-E, ARC-C, MMLU, GPQA, GSM8K, HumanEval, SWE-bench, GAIA, WebArena, and OSWorld side by side. Their scores are not interchangeable: each benchmark uses different tasks, tools, environments, inference budgets, and scoring rules.&lt;/p&gt;

&lt;p&gt;This guide maps common evaluations from static question answering to agents completing real tasks, and explains what each benchmark can—and cannot—tell us.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Reading nanochat Source: From Configuration to a Training Step</title>
      <link>https://zheng-bobo.github.io/en/post/nanochat-gpt-pretraining-from-source/</link>
      <pubDate>Sat, 26 Sep 2026 21:00:00 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/nanochat-gpt-pretraining-from-source/</guid>
      <description>&lt;p&gt;This article follows the execution order of &lt;code&gt;scripts/base_train.py&lt;/code&gt;: command-line arguments, random seeds, DDP setup, model construction, weight initialization, scaling laws, optimizers, data loading, gradient accumulation, and finally one complete training step.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;documents → tokenizer and sequence packing → inputs/targets
          → GPT forward → cross-entropy loss
          → backward and gradient accumulation → optimizer step
          → evaluation, sampling, checkpointing, and resume&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The organization and code-reading path follow my nanochat Notion notes. The prose has been edited for clarity, while the source snippets and their original reading sequence are preserved.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; If token embeddings, causal self-attention, MLPs, residual connections, or next-token loss are still unfamiliar, start with &lt;a href=&#34;https://zheng-bobo.github.io/en/post/transformer-architecture/&#34;&gt;Transformer Architecture: From Token Embedding to the Training Loop&lt;/a&gt; and then return to this source-level walkthrough.&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>

    <item>
      <title>About</title>
      <link>https://zheng-bobo.github.io/en/about/</link>
      <pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate>

      <guid>https://zheng-bobo.github.io/en/about/</guid>
      <description>For more than five years, I worked on the core engineering and technical leadership of real-time collaborative documents at Kingsoft Office. My work spanned system and application architecture, core implementation, code review, performance engineering, and team delivery. I care about more than making a feature run: I want systems to remain understandable, reliable, and evolvable under high concurrency, long-lived connections, and failure.
Since September 2025, I have been pursuing an MSc in Computer Science at Leiden University, with a focus on Advanced Computing and Systems and Artificial Intelligence.</description>
    </item>

    <item>
      <title>Transformer Architecture: From Token Embeddings to the Training Loop</title>
      <link>https://zheng-bobo.github.io/en/post/transformer-architecture/</link>
      <pubDate>Mon, 14 Sep 2026 10:25:02 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/transformer-architecture/</guid>
      <description>&lt;p&gt;Transformer appears to be made up of many components, but a GPT-style forward path can be summarized as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;Token IDs
   ↓
Token Embedding + Position Embedding
   ↓
[LayerNorm → Self-Attention → Residual]
   ↓
[LayerNorm → FFN → Residual]
   ↓
Repeat for multiple Transformer blocks
   ↓
Final LayerNorm → LM Head
   ↓
Next-token logits → Cross-Entropy Loss&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This article starts from a simple GPT implementation and explains the role and tensor shape of each step along the data flow. The complete source code is placed at the end of the article. After reading the previous principles, you can compare and understand it with the code.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Anthropic Agent Evolution I: From Workflows to Agents—and Why Harnesses Matter</title>
      <link>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-1-from-workflows-to-agents/</link>
      <pubDate>Sat, 12 Sep 2026 21:08:45 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-1-from-workflows-to-agents/</guid>
      <description>&lt;p&gt;“Agent” is often used as a broad label for any system that calls tools or takes multiple steps. Anthropic&amp;rsquo;s engineering work offers a more useful distinction: &lt;strong&gt;a workflow follows code paths defined in advance; an agent lets the model dynamically choose its process from environmental feedback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This first article in the “Anthropic Agent Evolution” series establishes the vocabulary: augmented LLMs, fixed workflows, autonomous agents, and the harness that surrounds the model.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Anthropic Agent Evolution II: Context Reset and Structured Handoff</title>
      <link>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-2-context-reset-and-handoff/</link>
      <pubDate>Sat, 12 Sep 2026 21:07:45 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-2-context-reset-and-handoff/</guid>
      <description>&lt;p&gt;The central tension in long-running work is not whether a model can write code. It is that a task may last hours or days while every context window is finite. Replaying the entire history eventually creates both capacity and noise problems.&lt;/p&gt;

&lt;p&gt;Anthropic&amp;rsquo;s first long-running agent harness answered with a simple principle: &lt;strong&gt;reset conversational context, but externalize project state into structured artifacts that the next agent can recover.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>

    <item>
      <title>Anthropic Agent Evolution III: The Planner–Generator–Evaluator Quality Loop</title>
      <link>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-3-planner-generator-evaluator/</link>
      <pubDate>Sat, 12 Sep 2026 21:06:45 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-3-planner-generator-evaluator/</guid>
      <description>&lt;p&gt;The first harness let an agent continue across context windows, but continuity is not quality. Generators routinely mistake “mostly runs” for “good enough,” especially in subjective product and design work.&lt;/p&gt;

&lt;p&gt;Anthropic&amp;rsquo;s next step separated planning, generation, and evaluation so that an external evaluator became a source of evidence the generator had to respond to.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Anthropic Agent Evolution IV: Managed Agent Runtime—Session, Harness, and Sandbox</title>
      <link>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-4-managed-agent-runtime/</link>
      <pubDate>Sat, 12 Sep 2026 21:05:45 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/anthropic-agent-evolution-4-managed-agent-runtime/</guid>
      <description>&lt;p&gt;Earlier harnesses focused on how a model could continue work and improve quality. A managed service introduces system questions: how is a session persisted, how does work recover after a harness crash, how can sandboxes be replaced, how do customer VPCs connect, and how are credentials kept away from model-generated code?&lt;/p&gt;

&lt;p&gt;Anthropic Managed Agents answers by &lt;strong&gt;decoupling the brain, hands, and session behind stable interfaces.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>

    <item>
      <title>Stanford CS329A: A Complete Framework for Self-Improving AI Agents</title>
      <link>https://zheng-bobo.github.io/en/post/stanford-cs329a-self-improving-ai-agents/</link>
      <pubDate>Tue, 11 Aug 2026 06:27:01 +0200</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/stanford-cs329a-self-improving-ai-agents/</guid>
      <description>&lt;p&gt;Self-Improving AI Agent is not a mysterious system that recursively modifies itself indefinitely. A more practical understanding is: Agent forms a closed loop between generation, action, observation and verification, and uses the feedback obtained during reasoning to improve current answers, subsequent decisions, and even the next round of training.&lt;/p&gt;

&lt;p&gt;This article follows the main line of the Stanford CS329A course and strings together test-time calculations, verifiers, tool feedback, planning search, reinforcement learning, in-depth research and long-term evaluation into a complete framework.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Stanford CS230: Career Advice for the AI Era</title>
      <link>https://zheng-bobo.github.io/en/post/stanford-cs230-career-advice-in-ai/</link>
      <pubDate>Mon, 23 Mar 2026 12:22:13 +0100</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/stanford-cs230-career-advice-in-ai/</guid>
      <description>&lt;p&gt;AI is rapidly changing software engineering: the cost of writing code continues to fall, the tasks engineers can complete are becoming more and more complex, and the bottleneck of product development is also shifting. This article summarizes five suggestions on AI career development shared in CS230 - understand changes, choose peers, measure efforts with output, lay a solid technical foundation, and pay attention to Small AI.&lt;/p&gt;</description>
    </item>

    <item>
      <title>Translation: Linux I/O Multiplexing - select vs. poll vs. epoll</title>
      <link>https://zheng-bobo.github.io/en/post/linux-io-multiplexing-select-poll-epoll/</link>
      <pubDate>Thu, 11 Feb 2021 09:45:47 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/linux-io-multiplexing-select-poll-epoll/</guid>
      <description>Introduction  Before reading this article, you can first understand the five I/O models of Liunx
 References: I/O Models &amp;ndash;Section 6.2 of &amp;ldquo;UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking&amp;rdquo; by Richard Stevens
The following is the text of the article    One of the basic concepts of Linux (actually Unix) is that everything in Unix/Linux is a file. Each process has a file descriptor table that points to files, sockets, devices, and other operating system objects related to the process.</description>
    </item>

    <item>
      <title>Introduction to CSRF and CORS</title>
      <link>https://zheng-bobo.github.io/en/todo/csrf-and-cors-introduction/</link>
      <pubDate>Thu, 04 Feb 2021 17:32:47 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/todo/csrf-and-cors-introduction/</guid>
      <description>Introduction  Before introducing CRSF(Cross-site request forgery)&amp;amp;CORS(Cross-origin resource sharing), we first introduce HTTP. If readers are familiar with HTTP, they can skip this content directly.
HTTP request ﻿An HTTP request consists of four parts: request line, request header, blank line and request body.
1 2 3 4 5 6 7  GET /mix/76.html?name=kelvin&amp;amp;password=123456 HTTP/1.1 Host: www.fishbay.cn Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.</description>
    </item>

    <item>
      <title>Translation: Domain-Driven Design - Everything You Always Wanted to Know (1)</title>
      <link>https://zheng-bobo.github.io/en/post/domain-driven-design-everything-you-wanted-to-know-1/</link>
      <pubDate>Tue, 02 Feb 2021 12:06:47 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/domain-driven-design-everything-you-wanted-to-know-1/</guid>
      <description>Domain-Driven Design original address
 As a personal code base grows, its complexity inevitably increases. As this happens, it becomes very difficult to maintain the organization and structure of the code as originally intended, which is known as &amp;ldquo;software entropy&amp;rdquo;. After a series of iterations, maintaining good focus points and correctly decoupling classes and modules becomes more challenging if strict architectural guidelines are not enforced.
﻿In a traditional Model-View-Controller (MVC) structure, the “M” layer would retain all business logic but provide no clear guidelines on how to properly delineate responsibilities.</description>
    </item>

    <item>
      <title>A Practical Introduction to Go Assembly (2)</title>
      <link>https://zheng-bobo.github.io/en/post/introduction-to-go-assembly-2/</link>
      <pubDate>Fri, 01 Jan 2021 12:34:14 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/introduction-to-go-assembly-2/</guid>
      <description>Function call from assembly perspective ﻿ Let’s start with a simple example:
1 2 3 4 5 6 7 8 9 10  package main func main() { add(1, 1) } func add(a, b int64) (c int64) { c = a + b return }    After executing the go tool compile -S compliation_add.go command, the assembly code is as follows
1 2 3 4 5 6 7  .</description>
    </item>

    <item>
      <title>A Practical Introduction to Go Assembly (1)</title>
      <link>https://zheng-bobo.github.io/en/post/introduction-to-go-assembly-1/</link>
      <pubDate>Wed, 30 Dec 2020 11:25:47 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/introduction-to-go-assembly-1/</guid>
      <description>Program storage space layout  A process is an executing program instance. Each instance has its own address space and execution state. A program becomes a process when the operating system adds the appropriate information to the kernel data structures and allocates the necessary resources to run the program code.
 A thread is an abstract data type that represents a thread of execution within a process. A thread has its own execution stack, program counter value, register set and state.</description>
    </item>

    <item>
      <title>CAP and a Comparison of Service Discovery Systems</title>
      <link>https://zheng-bobo.github.io/en/post/cap-and-service-discovery-systems/</link>
      <pubDate>Sat, 29 Feb 2020 09:41:00 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/cap-and-service-discovery-systems/</guid>
      <description>Overview of CAP theory **A distributed system can only satisfy at most two of the three requirements of consistency (consistency), availability (Availability) and partition tolerance (Partition tolerance) at the same time. **
Introduction Overview of CAP theory: CAP theory of distributed systems
Consistency model ﻿ Consistency refers to all nodes see the same data at the same time, that is, after the update operation is successful and returned to the client, the data of all nodes at the same time is completely consistent.</description>
    </item>

    <item>
      <title>Understanding I/O: Random and Sequential Access</title>
      <link>https://zheng-bobo.github.io/en/post/understanding-random-and-sequential-io/</link>
      <pubDate>Thu, 06 Feb 2020 21:06:10 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/understanding-random-and-sequential-io/</guid>
      <description>Transfer: https://blog.csdn.net/BaiWfg2/article/details/52885287
&amp;emsp;&amp;emsp;Storage for DBAs: Ever been to one of those sushi restaurants where the food comes round in dishes on a conveyor belt? As each dish travels around the loop you eye it up and, as long as you can make your mind up in time, grab it. However, if you are as indecisive as me, there’s a chance it will be out of range before you come to your senses – in which case you have to wait for it to complete a further full revolution before getting another chance.</description>
    </item>

    <item>
      <title>Use a Mutex or a Channel?</title>
      <link>https://zheng-bobo.github.io/en/post/use-a-mutex-or-a-channel/</link>
      <pubDate>Thu, 16 Jan 2020 11:27:00 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/use-a-mutex-or-a-channel/</guid>
      <description>Use a sync.Mutex or a channel?
 Gives us 3 channel usage scenarios respectively:
 1. Transfer ownership of data 2. Assign work units 3. Convey asynchronous results  Usage scenarios of 2 mutex:
 1. Cache 2. Status  Chapter 2 &amp;ldquo;Go&amp;rsquo;s Philosophy on Concurrency&amp;rdquo; in the book &amp;ldquo;Concurrency In Go&amp;rdquo; also has a decision tree and detailed discussion
Summary
﻿Go implements the CSP communication model through channels, which are mainly used for message passing and event notification between goroutines.</description>
    </item>

    <item>
      <title>HTTP/1.1 vs. HTTP/2</title>
      <link>https://zheng-bobo.github.io/en/post/http-1-1-vs-http-2/</link>
      <pubDate>Thu, 16 Jan 2020 10:25:00 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/http-1-1-vs-http-2/</guid>
      <description>HTTP 1.1 In January 1997, HTTP/1.1 version was released, only half a year later than version 1.0. It further improved the HTTP protocol and has been used to this day 20 years later, and is still the most popular version. Main optimization points:
 Support long connection by default  HTTP/1.1 supports persistent connections and request pipelining. Persistent connections reuse established TCP connections and avoid repeating the RTT cost of the three-way handshake.</description>
    </item>

    <item>
      <title>Inside Go&#39;s Channel Runtime</title>
      <link>https://zheng-bobo.github.io/en/post/inside-go-channel-runtime/</link>
      <pubDate>Sun, 05 Jan 2020 11:19:10 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/inside-go-channel-runtime/</guid>
      <description>Channel is a very important type in the Go language and is the first object in Go. Through channels, Go implements memory sharing through communication. Channel is an important means of transferring data and synchronizing between multiple goroutines.  Note: All source code analysis in this article is based on Go1.13.3. Different versions may have different implementations.
channel syntax The syntax for declaring a channel is as follows:</description>
    </item>

    <item>
      <title>Implementing the Raft Protocol in Go (1)</title>
      <link>https://zheng-bobo.github.io/en/post/implementing-raft-in-go-1/</link>
      <pubDate>Sun, 22 Dec 2019 17:13:00 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/implementing-raft-in-go-1/</guid>
      <description>Introduction  The implementation idea comes from: MIT 6.824 course Lab 2: Raft
 Before doing the experiment, you should read the raft paper carefully, here it is: raft paper raft translation
Recommended reading: Students&amp;rsquo; Guide to Raft Raft Understandable Distributed Consensus
lab content  In this lab, you will implement most of the Raft design described in Extended Paper, including saving persistent state and reading it after a node fails and then restarts.</description>
    </item>

    <item>
      <title>Translation: Contiguous Stacks</title>
      <link>https://zheng-bobo.github.io/en/post/contiguous-stacks/</link>
      <pubDate>Sat, 30 Nov 2019 13:14:00 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/contiguous-stacks/</guid>
      <description>Contiguous stacks original address
 Allocate a continuous stack memory space for each go coroutine. When the memory is used up, it will be reallocated/copied and grown.
Why?  The current stack splitting mechanism has a &amp;ldquo;hot split&amp;rdquo; problem - if the stack space is almost full, calling the function will trigger the forced allocation of a new stack block. When the calling function returns, the new stack block will be released.</description>
    </item>

    <item>
      <title>Inside Go&#39;s Main Goroutine Scheduler (2)</title>
      <link>https://zheng-bobo.github.io/en/post/go-main-goroutine-scheduler-2/</link>
      <pubDate>Wed, 13 Nov 2019 22:20:10 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/go-main-goroutine-scheduler-2/</guid>
      <description>9. Enter runtime/proc.go and scheduler initialization 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65  func schedinit() { // raceinit must be the first call to race detector.</description>
    </item>

    <item>
      <title>Why Is Quicksort Used More Often Than Merge Sort?</title>
      <link>https://zheng-bobo.github.io/en/post/why-quicksort-is-used-more-than-merge-sort/</link>
      <pubDate>Wed, 13 Nov 2019 20:32:10 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/why-quicksort-is-used-more-than-merge-sort/</guid>
      <description>What is honey to you is arsenic to another.   Quick sort: 1 2 3  * Worst-case time complexity: O(n^2) * Best-case time complexity: O(n log n) * Average time complexity: O(n log n)   Merge sort: 1  * Worst-, best-, and average-case time complexity: O(n log n)   Since the time complexity of merge sort is &amp;gt;= the time complexity of quick sort in different situations, why are the sorting algorithms we use in actual programming quick sort instead of merge sort?</description>
    </item>

    <item>
      <title>Inside Go&#39;s Main Goroutine Scheduler (1)</title>
      <link>https://zheng-bobo.github.io/en/post/go-main-goroutine-scheduler-1/</link>
      <pubDate>Sun, 10 Nov 2019 14:40:10 +0800</pubDate>

      <guid>https://zheng-bobo.github.io/en/post/go-main-goroutine-scheduler-1/</guid>
      <description>Under the compilation, all traces are revealed.   1.go program entry_rt0_amd64_linux: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  // The TEXT instruction defines the symbol _rt0_amd64_linux, the global data symbol is declared with DATA, and GLOBL defines the data as global. // SB SB virtual register: saves the starting address of the program address space; the value saved by this SB register is the starting address of the TEXT segment, which is mainly used to locate global symbols.</description>
    </item>

    <item>
      <title>Notes on Critical Thinking</title>
      <link>https://zheng-bobo.github.io/en/note/critical-thinking-notes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>

      <guid>https://zheng-bobo.github.io/en/note/critical-thinking-notes/</guid>
      <description>Introduction The author&amp;rsquo;s own definition of critical thinking: thinking about ways of thinking
The benefits of being a good thinker
How to become a good thinker&amp;ndash;&amp;gt;Develop a critical thinking style&amp;ndash;&amp;gt;The importance of critical thinking
Detailed explanation of the concept of critical thinking&amp;ndash;&amp;gt;Analysis and evaluation
Re-emphasized the importance of critical thinking and briefly introduced the measurement criteria of critical thinking
1 2 3 4  The essence of learning is improving and controlling how you think.</description>
    </item>

  </channel>
</rss>