Photo from Unsplash

在進入正文之前先粗略描述筆者的技術背景,希望讀者能理解觀察與描繪面試流程的視角,也提供背景相似的讀者一些參考。目前我有五年多的程式撰寫經驗,軟體工程師相關實習經驗約一年半,在 SITCON、COSCUP 等等會議給過幾次 Talk,技術算是上的了檯面。

這次接觸的企業都是中小型的軟體新創或是外商,比如 iCHEF、UI.com、PicCollage、17 Media,可能會有誤差無法代表整個軟體產業,但如果你嚮往的企業性質相似的話,這篇文章具有足夠的代表性。

接觸企業的方式我主要 …

Not all traffic can be arbitrarily routed.

While taking the responsibility of a mature service, it may not be possible for a single server to handle all the workload. This is due to three main considerations: performance, availability, and economy.

In order to handle the excessive traffic well, increasing the capacity of processing requests is necessary, it can be achieved by either scale-up or scale-out.

Photo by Piret Ilver on Unsplash

However, machine failures happen, and the cost of using top specification machines may not be affordable. Spread the workload evenly into multiple general workers sounds like a more feasible solution in most cases.

There may be an index better than the default for your database.

As the amount of data in the database increases, the performance of the query may start to be unsatisfactory. However, we definitely can’t let the service continue to slow down because of this bottleneck, a suitable solution is necessary.

Photo by Denny Müller on Unsplash

Using table index is one of the most common solutions to slow reading, it could be built byCREATE INDEX or similar commands in ORM. In most cases, if the column we used to build is the same as we used for search, the performance will be significantly improved.

But, did I use index properly in this way?

Although all of the…

As the complexity of software architecture increases, good analysis and design become more and more critical. Since I became a software engineer so far, we are used to drawing something like an architecture diagram on a whiteboard and discuss with other colleagues.

But … have we really done the analysis and design well through this kind of process?

Photo by Lucas Santos on Unsplash

This may work during an interview that allows us to throw out a reasonable solution, but not always suitable for a real-world problem after onboarding. A software system needs to be considered about robustness and practicality, not just a proposal.

Most of…

Recently I was responsible for the integration of Stripe online payment service, and take some notes about workflow planning and SDK usage details.

Stripe would be highly recommended for the payment tasks due to its software-engineering-friendly SDK, the succinct interface and complete documentation also helpful during my development.

Image from https://stripe.com/

The third-party python project management tool poetry, and the web framework Django and its dependent REST API extension would be used in this article.

Below is my pyproject.toml file, you can refer to it while building the virtual environment.

Architecture Overview

As far as a platform service which needs to support…

This semester I participated in a course on network data mining, which includes a crawler-related project that had much room for technical play, and I think it is worth writing an article to share.

Image from Unsplash

The students were asked to collect unique URLs as much as possible with website-scraping skills but do not limit the tools used. For these kinds of IO-bound tasks, how to solve the performance bottleneck of waiting for network communication is a point worthy of attention (especially some poorly performing websites).


中午吃飯滑手機時收到 CakeResume 的新功能通知,是個程式技能的認證機制,和同行朋友聊了下看法後得出了些有趣的結論,決定寫篇文章來分享一下從一個求職者視角的想法。


市面上多數這類型的類媒合平台,不管是約會、家教、就業、募資,只要是使用者明顯分為兩個族群的 (e.g. 男性/女性、老師/學生、徵才者/求職者、募資者/投資者),並設法將雙方鏈結以創造價值的,在服務增長上都一定會面臨到一個課題,那就是雙邊市場策略


然而事與願違的是,多數對於其中一端有利的策略,都對另一 …

Consider a well-modulize project structure, we certainly take the advantage of the flexibility which empowers us to change or extend at less limit. Unfortunately, the complexity of communication between modules increases rapidly with the developing process.

Image from Unsplash

After a few version iterations, the engineers might start to think about related issues, for example:

  • “How many database connection handlers did we instantiate?”
  • “Which config object was read in this function?”
  • “I guess this exception was caused by the server initialized before the logger was ready…”

These all show the need for a clearer plan of interaction between instances, arrange the timing of…

Driven by the curiosity of database tunning, I have taken some time to study how the database planner plans the query strategy this week. This really gave me great inspiration, which makes me pay more attention to how I construct a complex SQL.

Image from Unsplash

Here I will write down some notes about serval useful commands to display the plan and details via PostgreSQL.

SQL Command

Whenever we enter a SQL command, it will go through the few steps below:

  • parse
    detect whether the command is lexically and syntactically correct, this makes sure it could be understood in the following steps.
  • plan
    generate several suitable…

During my search for job opportunities in the past few weeks, I found that the frequency of the keyword “GraphQL” appears in the description of vacancies has become much higher than last year. Although I am an engineer accustomed to REST, my strong curiosity still drives me to give it a try.

There are several modules that can help us implement GraphQL API, I have no special consideration now, so I just pick the most popular one. graphene-django would be great for a quick start, it has plenty of discussion on the internet and highly-integrated with the Django framework.

The Pain of REST


Rain Wu

A software engineer specializing in distributed systems and cloud services, desire to realize various imaginations of future life through technology.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store