<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Study Notes on LOCRIAN_V Blog</title>
    <link>https://lv-blog.pages.dev/en/tags/study-notes/</link>
    <description>Recent content in Study Notes on LOCRIAN_V Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 18 Jun 2024 12:51:35 +0800</lastBuildDate>
    <atom:link href="https://lv-blog.pages.dev/en/tags/study-notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Studying for the System Architect Software Exam</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/ruan-kao/</link>
      <pubDate>Tue, 18 Jun 2024 12:51:35 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/ruan-kao/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;These notes are organized around the core knowledge points of the exam syllabus, with code examples and memory mnemonics — good for a final sprint review. (The exam is China&amp;rsquo;s &amp;ldquo;Soft Exam&amp;rdquo; — Computer Technology and Software Professional Qualification — System Architect level.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;1-laws-regulations-and-standardization&#34;&gt;1. Laws, Regulations, and Standardization&lt;/h2&gt;
&lt;h3 id=&#34;11-copyright&#34;&gt;1.1 Copyright&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Category&lt;/th&gt;
					&lt;th&gt;Content&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Not protected&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Government documents, laws and regulations, current-affairs news&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Speeches, authored books, software code&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;When it vests&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Automatically arises from the day software development is completed&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Protection term&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;50 years (attribution, modification, and integrity rights are protected permanently)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Copyright ownership rules:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning ElasticSearch</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/backend/elasticsearch/</link>
      <pubDate>Sat, 18 May 2024 12:51:05 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/backend/elasticsearch/</guid>
      <description>&lt;h2 id=&#34;1-fundamentals&#34;&gt;1. Fundamentals&lt;/h2&gt;
&lt;h3 id=&#34;11-origin-lucene&#34;&gt;1.1 Origin: Lucene&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lucene&lt;/strong&gt;: Apache&amp;rsquo;s open-source Java full-text search engine library.&lt;/li&gt;
&lt;li&gt;Advantages: easy to extend, high performance (pure Java, embeddable).&lt;/li&gt;
&lt;li&gt;Drawbacks: complex to use — you must handle low-level details like index creation and query parsing, with no distributed support.&lt;/li&gt;
&lt;li&gt;Elasticsearch is built on Lucene, providing a distributed, easy-to-use RESTful API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;12-the-tech-stack-elk&#34;&gt;1.2 The tech stack (ELK)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;: the storage, search, and analytics engine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logstash&lt;/strong&gt;: a server-side data processing pipeline that collects and transforms data before sending it to ES.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kibana&lt;/strong&gt;: a visualization platform for building charts and dashboards and managing ES.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beats&lt;/strong&gt;: lightweight data shippers that send to Logstash or ES.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;13-installing-with-docker&#34;&gt;1.3 Installing with Docker&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt; (single node):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning AWS</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/backend/aws/</link>
      <pubDate>Thu, 18 Apr 2024 12:48:03 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/backend/aws/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Compiled for the Solutions Architect certification, from a Java backend perspective. Core idea: &lt;strong&gt;what pain point each service solves, when to choose it, and how to distinguish it from similar services.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;1-storage&#34;&gt;1. Storage&lt;/h2&gt;
&lt;h3 id=&#34;11-comparison-of-the-three-storage-types&#34;&gt;1.1 Comparison of the three storage types&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Representative service&lt;/th&gt;
					&lt;th&gt;Access unit&lt;/th&gt;
					&lt;th&gt;Typical scenario&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Block storage&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;EBS, EC2 Instance Store&lt;/td&gt;
					&lt;td&gt;Block&lt;/td&gt;
					&lt;td&gt;Databases, OS disks&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;File storage&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;EFS, FSx&lt;/td&gt;
					&lt;td&gt;Files / directory tree&lt;/td&gt;
					&lt;td&gt;Multi-instance sharing, NFS/SMB mounts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Object storage&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;S3&lt;/td&gt;
					&lt;td&gt;Object (Object + Key)&lt;/td&gt;
					&lt;td&gt;Static assets, backups, data lakes&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Block storage  → like a local hard drive; the OS sees a raw device it formats and mounts itself
File storage   → like a NAS; multiple machines can mount the same directory at once
Object storage → like HTTP PUT/GET key-value; no directory concept, simulated with prefixes
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h3 id=&#34;12-amazon-s3&#34;&gt;1.2 Amazon S3&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Quick reference of core features:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning Spring Cloud</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/backend/spring-cloud/</link>
      <pubDate>Mon, 18 Mar 2024 12:46:51 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/backend/spring-cloud/</guid>
      <description>&lt;h2 id=&#34;1-service-decomposition-and-remote-calls&#34;&gt;1. Service Decomposition and Remote Calls&lt;/h2&gt;
&lt;h3 id=&#34;11-why-decompose-into-services&#34;&gt;1.1 Why decompose into services?&lt;/h3&gt;
&lt;p&gt;As business grows, a monolith faces slow deployment, poor scalability, a frozen tech stack, and more. Microservices split it into small, &lt;strong&gt;independently deployable and scalable&lt;/strong&gt; services, each responsible for a single business domain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decomposition principles:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single responsibility: each service does one thing&lt;/li&gt;
&lt;li&gt;High cohesion, low coupling: tight within a service, loose between services&lt;/li&gt;
&lt;li&gt;Data independence: each service owns an independent database&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;12-the-user-login-flow-from-a-microservice-view&#34;&gt;1.2 The user-login flow (from a microservice view)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Client → Gateway (auth) → business microservice A → microservice B (OpenFeign)
                ↓
           Nacos (service discovery)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;13-resttemplate--the-raw-inter-service-call&#34;&gt;1.3 RestTemplate — the raw inter-service call&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;RestTemplate&lt;/code&gt; is the HTTP client Spring provides for inter-service calls, but its &lt;strong&gt;code is verbose and it doesn&amp;rsquo;t support load balancing&lt;/strong&gt; — a transitional solution before OpenFeign.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning the SSM Framework</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/backend/ssm/</link>
      <pubDate>Sun, 18 Feb 2024 12:40:44 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/backend/ssm/</guid>
      <description>&lt;h2 id=&#34;1-the-spring-ioc-container&#34;&gt;1. The Spring IoC Container&lt;/h2&gt;
&lt;h3 id=&#34;11-container-architecture&#34;&gt;1.1 Container architecture&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BeanFactory (top-level interface)
    └── ApplicationContext (the commonly used interface, extends BF)
            ├── ClassPathXmlApplicationContext (XML config)
            ├── FileSystemXmlApplicationContext (filesystem-path XML)
            └── AnnotationConfigApplicationContext (annotation config)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Core differences between BeanFactory and ApplicationContext:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;BeanFactory&lt;/th&gt;
					&lt;th&gt;ApplicationContext&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Bean init timing&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Lazy&lt;/strong&gt; (on the first getBean)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Eager&lt;/strong&gt; (at container startup)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Features&lt;/td&gt;
					&lt;td&gt;Basic IoC&lt;/td&gt;
					&lt;td&gt;IoC + event publishing + i18n + AOP, etc.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Use case&lt;/td&gt;
					&lt;td&gt;Extremely resource-constrained embedded&lt;/td&gt;
					&lt;td&gt;99% of business scenarios&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why doesn&amp;rsquo;t ApplicationContext have close()?&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;ApplicationContext&lt;/code&gt; interface itself doesn&amp;rsquo;t define &lt;code&gt;close()&lt;/code&gt;, to keep the interface general (not all containers can/need to be closed, e.g. web containers). But its implementation &lt;code&gt;AbstractApplicationContext&lt;/code&gt; implements &lt;code&gt;Closeable&lt;/code&gt;, so you can cast and call it, or receive it via the &lt;code&gt;ConfigurableApplicationContext&lt;/code&gt; interface.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning MyBatis-Plus</title>
      <link>https://lv-blog.pages.dev/en/posts/programming/backend/mybatisplus/</link>
      <pubDate>Tue, 16 Jan 2024 15:38:37 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/en/posts/programming/backend/mybatisplus/</guid>
      <description>&lt;h2 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;MyBatis-Plus (MP for short) is an enhancement tool for MyBatis. It only enhances MyBatis without changing it, built to simplify development and improve efficiency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Non-intrusive&lt;/strong&gt;: adding MP has no effect on an existing MyBatis project — smooth as silk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low overhead&lt;/strong&gt;: basic CRUD is auto-injected at startup, with essentially no performance loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Powerful CRUD operations&lt;/strong&gt;: built-in generic Mapper and generic Service; with just a little configuration you get most single-table CRUD.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supports Lambda-style calls&lt;/strong&gt;: write query conditions safely and efficiently via lambda expressions, preventing mistyped field names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in code generator&lt;/strong&gt;: generate Mapper, Service, Controller, etc. with minimal configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in pagination plugin&lt;/strong&gt;: physical pagination based on MyBatis; developers don&amp;rsquo;t need to worry about the details — just configure and use.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Official site&lt;/strong&gt;: &lt;a href=&#34;https://baomidou.com/&#34;&gt;https://baomidou.com/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
