細數Android開發者的艱辛歷程,全網最新

前言

這篇文章主要是分享今年面試心得,現已就職于某大廠有三個月了,近期有很多公司均已啟動秋招,也祝大家面試順利,獲得理想的offer!

之前找工作的那段時間感想頗多,總結一點面試經驗和人生思考分享給大家。

這是我印象深刻的一道題,很明顯它是我的第一次,那時我去一家公司(暫時叫它T公司吧)面試外派到韓國三星的工作機會。T公司的面試官是一個叫Bely架構師,顯然那個時候Android開發是稀缺資源,知道Service那都不得了了,當然Bely也沒打算為難我(必竟也工作4年多了,人長得也不錯),我輕松對答:

Service是一個專門在后臺處理長時間任務的Android組件,它沒有UI。它有兩種啟動方式,startService和bindService。

你猜得沒錯,Bely緊接著問我:這兩種啟動方式的區別。

startService只是啟動Service,啟動它的組件(如Activity)和Service并沒有關聯,只有當Service調用stopSelf或者其他組件調用stopService服務才會終止。
bindService方法啟動Service,其他組件可以通過回調獲取Service的代理對象和Service交互,而這兩方也進行了綁定,當啟動方銷毀時,Service也會自動進行unBind操作,當發現所有綁定都進行了unBind時才會銷毀Service。

這應該是比較關鍵的區別了,在面試前我剛剛用Serivce做過一個音樂播放器。幾年后,我在深圳面試過很多人,他們中有60-70%的人沒有使用Service的經驗,讓我一度感覺得深圳這座城市做Android開發的比較浮躁。因為這兒工作機會太多了,初級的開發者都比較急功近利,不需要在自己身上下太多的功夫也可以找到工作(當然這是片面的認識)。

當然還有其他的區別,如兩種調用對Service生命周期函數影響,面試官也可以就這個問題展開一下。

當我遇到面試者知道怎么使用Service,也如多年前的我可以自如的答出startService和bindService的區別時,我一般會多問一句:

Service的onCreate回調函數可以做耗時的操作嗎?

很多人都會說:可以。

原形畢露,他前面的回答只是在面試前預習了一下面試題而已。如果知道Service的onCreate是在主線程(ActivityThread)中調用的,耗時操作會阻塞UI,我一般再接著問:

如果需要做耗時的操作,你會怎么做?

問題便這樣展開了,一個人是否真正懂得原理會靈活運用,一下子便能看出來。 當面試者回答到線程和Handler方式時,我會再問一下對方:

是否知道IntentService,在什么場景下使用IntentService?

這也是面試官要看的點,真正的項目需要一個開發人員對某個問題有一定的深度,也需要對整個Android的知識點有一定的廣度。深度代表這個人對問題認真對待有鉆研的精神,廣度代表這個人在面對同一個問題時,會更容易從多種可行的方案中選出最合適的一種。

Service的實際項目中一直被很多人忽略,為什么我一再強調Service很重要,我們來看看,如果對Service完全無知會在工作中遇到什么問題。

場景:如果一個應用要從網絡上下載MP3文件,并在Activity上展示進度條,這個Activity要求是可以轉屏的。那么在轉屏時Actvitiy會重啟,如何保證下載的進度條能正確展示進度呢?

沒有Service概念的人,一般想出來的方案如下:

  1. 在轉屏前將進度緩存,轉屏后再讀出來。
  2. 使用android:configChanges設置,讓轉屏時Activity不銷毀和重建。

針對第1個方案,我會繼續問他將進度值存在哪里? 轉屏的過程中,我們知道Activity的重建算是比較耗時的,會可能會有幾百毫秒以上,那么這時候下載線程仍然在工作,進度肯定和保存時的進度不一致了,如何處理這個問題呢?

第2個方案,大家可以自己展開思考,實際的項目中可能會需要額外做一些事情來處理ContentView的橫豎布局的問題。

如果使用Service來解決這個問題,看似是比較完美的,不過就會涉及Activity(UI)和Service的交互問題,這個我們以后再討論。

文末

對于很多初中級Android工程師而言,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助。 整理的這些架構技術希望對Android開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收獲與成長,其余的都不重要,希望讀者們能謹記這一點。

最后想要拿高薪實現技術提升薪水得到質的飛躍。最快捷的方式,就是有人可以帶著你一起分析,這樣學習起來最為高效,所以為了大家能夠順利進階中高級、架構師,我特地為大家準備了一套高手學習的源碼和框架視頻等精品Android架構師教程,保證你學了以后保證薪資上升一個臺階。

當你有了學習線路,學習哪些內容,也知道以后的路怎么走了,理論看多了總要實踐的。
以上進階BATJ大廠學習資料可以免費分享給大家,需要完整版的朋友,點這里可以看到全部內容。

進階學習視頻

附上:我們之前因為秋招收集的二十套一二線互聯網公司Android面試真題?(含BAT、小米、華為、美團、滴滴)和我自己整理Android復習筆記(包含Android基礎知識點、Android擴展知識點、Android源碼解析、設計模式匯總、Gradle知識點、常見算法題匯總。)

模式匯總、Gradle知識點、常見算法題匯總。)

[外鏈圖片轉存中…(img-SDpcOCSo-1618563382984)]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac安裝nginx配置過程

mac電腦系統重裝了,記錄一下安裝nginx的過程: 1、打開終端 2、安裝Command Line tools xcode-select --install 3、安裝brew命令 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 4、安裝…

2.用Python套用Excel模板,一鍵完成原亮樣式

from xlutils.copy import copy import xlrd import xlwttem_excelxlrd.open_workbook(日統計.xls,formatting_infoTrue)tem_sheettem_excel.sheet_by_index(0)new_excelcopy(tem_excel) new_sheetnew_excel.get_sheet(0) new_sheet.write(2,1,12) new_sheet.write(3,1,18) new…

面試中Handler這些必備知識點你都知道嗎?面試真題解析

前言 前幾天去參加了一場面試。面試的題目大多很基礎,有一道關于埋點的問題,面試官問我如果不用第三方SDK進行埋點,自己埋點的話,如何減少埋點對業務代碼的入侵。 當時沒想太多,就說創建一個 BaseView 類&#xff0c…

kubernetes對象之deployment

系列目錄 簡述 Deployment為Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController來方便的管理應用。典型的應用場景包括: 定義Deployment來創建Pod和ReplicaSet滾動升級和回滾應用擴容和縮容暫停和繼續Deploymen…

面試加分項!Android權限處理,手慢無

2021新的一年,開啟新的征程,回顧2020,真是太“南”了。 從年初各大廠裁員,竟然成為一件理所應當的事情,到四月份 GitHub 上“996.ICU” 引起了大家的共鳴。即使我們兢兢業業“996”,但依舊難以抵御 35 歲時…

面試加分項!程序員工作2年月薪12K,附架構師必備技術詳解

最近看到群里看到一個女生,講述了她從開始選擇Android,經過非常努力的學習和掙扎,然而最后面對當前的環境卻不得不放棄。看完以后真的非常替她感覺惋惜,如果早幾年入行可能結果會比現在好很多,但可惜,這就是…

物理機實時監控UI之grafana(SimpleJson)+gRPC

在時序分析及監控展示領域,Grafana無疑是開源解決方案中的翹楚,其靈活的插件機制,支持各種漂亮的面板、豐富的數據源以及強大的應用。典型的面板有Graph、Text、Singlestat、PieChart、Table、Histogram等,支持的數據源有ES、Grap…

Uva679

Dropping Balls UVA - 679 思路&#xff1a;和之前做的開關燈的題類似 只需要看小球的編號奇偶。 找規律就行&#xff0c;一直想推導出這個規律滿足所有情況&#xff0c;但是沒有想出來怎么推。 1 #include<bits/stdc.h>2 #define maxn 1053 #define LL long long4 usi…

面試大廠應該注意哪些問題?算法太TM重要了

前言 很多次小伙伴問到學習方法&#xff0c;我也很想寫這樣的一篇文章來跟大家討論下關于學習方法這件事情。 其實學習方法這個事情&#xff0c;我沒啥發言權&#xff0c;因為我自己本身都是沒啥方法可言的&#xff0c;就瞎折騰那種&#xff0c;但是大家想看這樣的一篇文章&a…

Spring Boot 與 Java 對應版本,以下表格由官方網站總結。

Spring Boot 與 Java 對應版本&#xff0c;以下表格由官方網站總結。 官網&#xff1a;https://spring.io/projects/spring-boot#learn https://docs.spring.io/spring-boot/docs/{verion}/reference/htmlsingle/ Go to [9. System Requirements] Sping BootSpring Framew…

Java開發環境之RabbitMQ

查看更多Java開發環境配置&#xff0c;請點擊《Java開發環境配置大全》 捌章&#xff1a;RabbitMQ安裝教程 1&#xff09;下載安裝Erlang 官網下載&#xff1a;http://www.erlang.org&#xff0c;有時比較難訪問進去 Windows版下載&#xff1a;http://www.erlang.org/download/…

Linux下GitLab的安裝及使用

一、初始GitLab GitLab是利用Ruby on Rails一個開源的版本管理系統&#xff0c;實現一個自托管的Git項目倉庫&#xff0c;可通過Web界面進行訪問公開的或者私人項目。 與Github類似&#xff0c;GitLab能夠瀏覽源代碼&#xff0c;管理缺陷和注釋。可以管理團隊對倉庫的訪問&a…

面試大廠應該注意哪些問題?隔壁都饞哭了

前言 說起程序員人們的第一印象就是工資高、加班兇、話少錢多頭發少。再加上現在科技互聯網公司太吃香&#xff0c;bat、華為小米等公司程序員加班情況被廣泛傳播&#xff0c;程序員用生命在敲代碼的印象刻在了很多人的心里。 與其它行業一樣&#xff0c;凡是有高級和普通&…

元類(metaclass)

目錄 一、引言二、什么是元類三、為什么用元類四、內置函數exec(儲備)五、class創建類5.1 type實現六、自定義元類控制類的創建6.1 應用七、__call__(儲備)八、__new__(儲備)九、自定義元類控制類的實例化一十、自定義元類后類的繼承順序十一、練習一、引言 元類屬于python面向…

Linux環境下使用rpm包安裝GitLab

1.安裝依賴環境 [rootgitlab ~]# yum install curl openssh-server postfix cronie 2.下載安裝GitLab包 我安裝的環境是Red Hat Enterprise Linux Server release 7.4 (Maipo) GitLab下載地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 以上是清華大學開源…

面試字節跳動Android工程師該怎么準備?深度解析,值得收藏

前言 Android高級架構師需要學習哪些知識呢&#xff1f; 下面總結一下我認為作為一個資深開發者需要掌握的技能點。 1.Android開發的幾個階段 我的10年開發生涯中&#xff0c;有9年都是做Android相關開發&#xff0c;以我個人的經歷來看&#xff0c;Android開發市場分為以下…

以JSONobject形式提交http請求

總結一下設置圖標的三種方式&#xff1a; &#xff08;1&#xff09;button屬性&#xff1a;主要用于圖標大小要求不高&#xff0c;間隔要求也不高的場合。 &#xff08;2&#xff09;background屬性&#xff1a;主要用于能夠以較大空間顯示圖標的場合。 &#xff08;3&#xf…

阿里巴巴Android面試都問些什么?系列篇

Google 為了幫助 Android 開發者更快更好地開發 App&#xff0c;推出了一系列組件&#xff0c;這些組件被打包成了一個整體&#xff0c;稱作 Android Jetpack&#xff0c;它包含的組件如下圖所示&#xff1a; 老的 support 包被整合進了 Jetpack&#xff0c;例如上圖 Foundatio…

安裝容器編排工具 Docker Compose

安裝容器編排工具 Docker Compose curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose 授權&#xff1a; chmod x /usr/local/bin/docker-compose 查看安裝結果 docker-com…