(Original article published at: http://blog.techbridge.cc/2016/05/20/fast-way-to-get-apk-information/)

Introduction

In a previous article, we introduced how to decompile an Android APK. By decompiling, we can obtain a lot of information related to the APK, such as AndroidManifest.xml. With this file, we can see some basic information about the APK, and also see the entire code of the APK and the resources used (pictures, videos, sounds, etc.).

But if today we only want to know the basic information, and we don’t care about how the APK is written or what resources it uses, what should we do? Decompiling takes some time, and the larger the APK, the longer it takes. Is there a better way?

Read More

(Original post published at: http://blog.techbridge.cc/2016/04/23/fast-restful-nodejs-api-backend/)

Introduction

Some websites today use the Single Page Application approach, where the backend only provides APIs for the frontend to fetch data, achieving complete separation of the frontend and backend. There are many choices for the frontend, you can use Angular, Ember.js, or React + Redux. As for the backend API, it must conform to a fixed format to make it easier for frontend developers to fetch data. And this “fixed format” is most commonly known as our focus today: RESTful.

Read More

Introduction

When writing programs, we often use the “search” function. The simplest search is to find the number you want in a string of numbers, which is also our topic today.

This article will be divided into three parts. The first part will introduce the linear search method, the second part will introduce the binary search method, and the last part will discuss the different implementation methods of the binary search method under different conditions.

Read More

Recently, there was an incident where our server was attacked by a large number of requests. Unfortunately, the server was hosting a forum service. Assuming that the attack point was the forum homepage, each request would query the database and there were a lot of joins. Some of the instructions were POST, which would update the database. This caused the database to lock up and the CPU to skyrocket, leading to a crash.

If the forum was self-written, we could add a cache like Redis between the database and application. However, this forum system is someone else’s and we cannot modify it.

Read More

The full name of CS50 is Introduction to Computer Science, which is a general education course at Harvard University. It is available on edx, and anyone can take it. There are even teaching assistants to help you with programming assignments (only programming assignments, not other types of assignments like paper-based ones).

The first time I heard about CS50 was through this report: CS50: A “hard” course taken by over 800 Harvard students, what makes it so attractive?. It wasn’t until I finished the course recently that I understood what makes this course so impressive.

Let’s start with the meaning of the title: An Ocean-like Programming Course. Why the ocean? Because this course is deep and wide. How deep and wide is it? I recorded the course outline and assignments for each week. If you have a friend with a computer science background, they will know what I mean.

Read More

Introduction

For Android engineers, understanding how to decompile can enhance their understanding of the Android system and also consider how to protect their APK from being decompiled.

For the general public, many ready-made tools can help us easily decompile APKs and see Java source code, satisfying our curiosity.

This article only introduces the use of some tools, suitable for beginners to watch. If you want to understand more underlying knowledge, you can refer to the extended reading attached at the end of the article.

Read More

Although I interviewed about 20 companies last year, it wasn’t until recently that I realized how important the interview process is for a company. Of course, the importance of HR cannot be underestimated either.

If the HR of a company does a good job and the interview process makes the interviewee feel cared for, in this era of open internet, the job seeker may share with friends later: Hey, I went to XXX today, their interview process is awesome! Conversely, a poor interview process can cause harm for years to come, with negative reviews one after another. Below are some practical examples, all of which are positive examples, and I will directly mention the company names. Yes, I remember the companies that treated me well when I went for an interview!

Today I want to talk to you about my ideal interview process, which can be roughly divided into three steps:

  1. Before the interview (arranging the interview)
  2. During the interview
  3. After the interview

Let’s discuss each of these three steps one by one.

Read More

For those who write code, no matter which programming language or development environment they use, they will need to execute some commands at some point. This is when they will open the terminal and start typing commands. The most commonly used commands are cd, ls, git, ssh, rsync, etc. However, the built-in terminal is actually quite difficult to use. Today, I want to recommend a better option to you.

Read More

Previously, I wrote an article to briefly summarize my experience in learning Redux. I still recommend the official documentation because it is super clear.

However, when I was reading the official documentation before, I didn’t fully understand the middleware part and got confused towards the end. This time, I re-read the official documentation on middleware and asynchronous operations, took notes while reading, and finally understood the implementation principle of middleware. As usual, I will share my experience.
Official documentation (Chinese version, but this article has not been translated yet)

The great thing about the official documentation is that it not only teaches you how to use it, but also starts from scratch, so you know why middleware is in its current form.

Read More

In JavaScript, there is a super important concept called asynchronous, which is also the easiest concept to confuse and forget when you first start learning. ES6 natively supports Promise, which works better with Generator, and ES7 even supports the syntax of async. I think this is an evolutionary process that makes the program architecture better and more readable. So to explain these new things, let’s start with the most basic callback.

Read More