|Jobs| 面試時的 Check Points

設定:
軟體工程師,非管理職
製造業/電子業
系統廠/ IC設計通用


(關於出差)
是否出差到工廠
出差頻率如何
出差地點是否為亞洲
出差膳雜費是實報實銷還是算天數
 ==>
 通常亞洲/工廠,如果頻率很常,要小心啦!
 基本上,實報實銷的一定是小氣公司

(關於加班)
平均部門下班時間
是否有加班費
 ==>
 請算好你的時薪 = 月薪/8/30
 如果沒有加班費,算法就是 = 月薪/常態上班時數/30
 每加薪 3000,相當於你時薪增加 12.5元
 我自己算法:每需要常太多工作一小時,月薪要增加至少 10000元 (沒加班費的公司)

(關於客戶)
是否有AE
是否有 issue tracker 系統


(關於debug)
是否有公版或模擬器
是否有自己的 log tool

(關於維護期)
案期多長, support期多
 ==>
 當你曾經接過 10年前的臭蟲,你就明白為何要問這個

|Job| Application No Response Analysis

ANR 的發生情形,通常是時間到了還沒有回應!所以掌握這個想法,就比較好找 Code。

比較常見有三種情形:

  1. Service Timeout
  2. BroadcastQueue Timeout
  3. ContentProvider Timeout

 

Case 1. Service Timeout

 a. Service 啟動後,會發送 SERVICE_TIMEOUT_MSG 消息
 b. Service 刪除後,就會刪除 SERVICE_TIMEOUT_MSG 消息
 c. 如果 SERVICE_TIMEOUT_MSG 未删除,時間到後就會 ANR

 呼叫 ActiveServices 的 serviceTimeout 方法進行處理,
 serviceTimeout方法邏輯:

 if (anrMessage != null) {
  mAm.appNotResponding(proc, null, null, false, anrMessage);
 }

 

Case 2. BroadcastQueue Timeout

 BroadcastQueue 中的 mHandler 收到 BROADCAST_TIMEOUT_MSG 消息時會觸發

 // 正常要發送消息前
 broadcastTimeoutLocked(false);

 // 發送消息,鎖住
 case BROADCAST_TIMEOUT_MSG: {
  synchronized (mService) {
   broadcastTimeoutLocked(true);

 // ANR
 在 broadcastTimeoutLocked 方法中,首先取得 anrMessage 字串

 anrMessage = “Broadcast of ” + r.intent.toString();

 mHandler.post(new AppNotResponding(app, anrMessage));
 mService.appNotResponding(mApp, null, null, false, mAnnotation);

 

Case 3. ContentProvider Timeout

 MainHandler 的 handleMessage CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG

 private final void processContentProviderPublishTimedOutLocked(ProcessRecord app) {
cleanupAppInLaunchingProvidersLocked(app, true);
 removeProcessLocked(app, false, true, “timeout publishing content providers”);
 }

 app.kill(reason, true);

 

ref.

https://blog.csdn.net/u012439416/article/category/7261623