主頁 > 後端開發 > 我的京東面試之旅,考試與面試撞期我該如何抉擇?

我的京東面試之旅,考試與面試撞期我該如何抉擇?

2020-10-24 06:15:55 後端開發

前言

這是我這么多次京東面試中印象最深刻的一次,很難受,也不知道誰有這種感受,一面過了,二面15號但是15學校考試 沖突了.

突然在12號下午收到短信去上海面試(本人廣西 飛機3小時 ).于是13從沖沖去訂機票,13號一早訂機票 到14晚上1點到(晚上10點機票 因為錢少),我完全沒去過上海,下飛機一直不知道出口在哪...然后一個黑車司機問我要不要住店 和打車.我沒理他 ,一直糾纏我..... 然后看到作業人員說出租車在那邊出去...... 然后再美團訂了個酒店 然后打車過去了.車費80心疼 我真農村的.... 到酒店晚上3點了.我發現我簡歷沒有做于是做簡歷,到晚上5點,睡到6點.然后出去上海鹿角嘴酒店 .我這邊在郊區必須早去 市區酒店有些貴.

到酒店 一樓有個電視提示 面試在3樓,到了之后掃碼簽到.收到短信說道XXX面試官面試.后面就是大家關心的面試內容

一面(完整題目):

5分鐘自我介紹 ,面試官看簡歷,我說"我是一個專升本 的同學,也許學歷在京東中是最低的了.(面試官 說不 你很好 很親切) ,然后我就說我在北京作業一年 的事情,我們公司CTO是北京郵電大學教授,

在貝爾實驗室作業過 ,經常受他指導.做過3個商業專案 XXXX,YYYYY,ZZZZ. 還有一個自己無聊做的漫畫軟體,介面資料抓取其他漫畫app.還有xposed 模塊開發小米商城秒殺商品,和超星爾雅app 破解刷課,

學校的教務搶課腳本"

然后面試官叫我 選擇一個 你自己影響最大的專案,我選擇了xposed 破解超星爾雅刷課視頻.提到了xposed原理,還有提到了免注冊啟動activity 原理,涉及handler原理(這里我擴張到ActivityThread,threadLoal 一些其他知識) activity啟動原理 ,aidl原理.這里我就不寫我怎么回答了(我想涉及到jadx和smai,動態除錯 沒機會了).

然后面試官就問我 訊息推送,這一塊對于想進bat的同學不難吧(反正騰訊 和阿里我掛了).訊息推送無非兩種 push 和pull ,一種是一直回圈 拉取,一種是長連接(xmpp.xqtt),因為xmpp由于資訊載體過大 所以我選擇xqtt的應用層協議.

.....這里說就點長了略過...... 關鍵是app包活才是關鍵(我涉及到native,雙service,gcm,alermanage,jobscheuler,心跳同步....).

然后面試官就說 我沒什么問題 你有什么想問的.

我就跟他說15號考試,能不能申請電話面試,他真的很和藹說幫我問問,后來第二天下午查官網面試狀態變成復試中 ,但是沒有收到短信和郵件.很難受.應該就這樣結束了!

這些年面試真題整理

上述面試題已經整理成檔案,有需要的可以 點擊進入 查看領取資料,

資料存盤

1、描述一下Android資料持久存盤方式?

參考回答:Android平臺實作資料持久存盤的常見幾種方式:

  • SharedPreferences存盤:一種輕型的資料存盤方式,本質是基于XML檔案存盤的key-value鍵值對資料,通常用來存盤一些簡單的配置資訊(如應用程式的各種配置資訊);

  • SQLite資料庫存盤:一種輕量級嵌入式資料庫引擎,它的運算速度非常快,占用資源很少,常用來存盤大量復雜的關系資料;

  • ContentProvider:四大組件之一,用于資料的存盤和共享,不僅可以讓不同應用程式之間進行資料共享,還可以選擇只對哪一部分資料進行共享,可保證程式中的隱私資料不會有泄漏風險;

  • File檔案存盤:寫入和讀取檔案的方法和 Java中實作I/O的程式一樣;

  • 網路存盤:主要在遠程的服務器中存盤相關資料,用戶操作的相關資料可以同步到服務器上;

2、SharedPreferences的應用場景?注意事項?

參考回答:SharedPreferences是一種輕型的資料存盤方式,本質是基于XML檔案存盤的key-value鍵值對資料,通常用來存盤一些簡單的配置資訊,如int,String,boolean、float和long;

注意事項:

  • 勿存盤大型復雜資料,這會引起記憶體GC、阻塞主執行緒使頁面卡頓產生ANR

  • 勿在多行程模式下,操作Sp

  • 不要多次edit和apply,盡量批量修改一次提交

  • 建議apply,少用commit

3、SharedPrefrences的apply和commit有什么區別?

參考回答:apply沒有回傳值而commit回傳boolean表明修改是否提交成功,

apply是將修改資料原子提交到記憶體, 而后異步真正提交到硬體磁盤, 而commit是同步的提交到硬體磁盤,因此,在多個并發的提交commit的時候,他們會等待正在處理的commit保存到磁盤后在操作,從而降低了效率,而apply只是原子的提交到內容,后面有呼叫apply的函式的將會直接覆寫前面的記憶體資料,這樣從一定程度上提高了很多效率,

apply方法不會提示任何失敗的提示,由于在一個行程中,sharedPreference是單實體,一般不會出現并發沖突,如果對提交的結果不關心的話,建議使用apply,當然需要確保提交成功且有后續操作的話,還是需要用commit的,

4、了解SQLite中的事務操作嗎?是如何做的

參考回答:SQLite在做CRDU操作時都默認開啟了事務,然后把SQL陳述句翻譯成對應的SQLiteStatement并呼叫其相應的CRUD方法,此時整個操作還是在rollback journal這個臨時檔案上進行,只有操作順利完成才會更新db資料庫,否則會被回滾;

5、使用SQLite做批量操作有什么好的方法嗎?

參考回答:使用SQLiteDatabase的beginTransaction方法開啟一個事務,將批量操作SQL陳述句轉化為SQLiteStatement并進行批量操作,結束后endTransaction()

6、如何洗掉SQLite中表的個別欄位

參考回答:SQLite資料庫只允許增加欄位而不允許修改和洗掉表欄位,只能創建新表保留原有欄位,洗掉原表

7、使用SQLite時會有哪些優化操作?

  • 使用事務做批量操作
  • 及時關閉Cursor,避免記憶體泄露
  • 耗時操作異步化:資料庫的操作屬于本地IO耗時操作,建議放入異步執行緒中處理
  • ContentValues的容量調整:ContentValues內部采用HashMap來存盤Key-Value資料,ContentValues初始容量為8,擴容時翻倍,因此建議對ContentValues填入的內容進行估量,設定合理的初始化容量,減少不必要的內部擴容操作
  • 使用索引加快檢索速度:對于查詢操作量級較大、業務對查詢要求較高的推薦使用索引

IPC

1、Android中行程和執行緒的關系?區別?

  • 執行緒是CPU調度的最小單元,同時執行緒是一種有限的系統資源
  • 行程一般指一個執行單元,在PC和移動設備上一個程式或者一個應用
  • 一般來說,一個App程式至少有一個行程,一個行程至少有一個執行緒(包含與被包含的關系),
  • 通俗來講就是,在App這個工廠里面有一個行程,執行緒就是里面的生產線,但主執行緒(主生產線)只有一條,而子執行緒(副生產線)可以有多個
  • 行程有自己獨立的地址空間,而行程中的執行緒共享此地址空間,都可以并發執行

2、如何開啟多行程 ?應用是否可以開啟N個行程 ?

  • 在AndroidMenifest中給四大組件指定屬性android:process開啟多行程模式

  • 在記憶體允許的條件下可以開啟N個行程

3、為何需要IPC?多行程通信可能會出現的問題?

參考回答:所有運行在不同行程的四大組件(Activity、Service、Receiver、ContentProvider)共享資料都會失敗,這是由于Android為每個應用分配了獨立的虛擬機,不同的虛擬機在記憶體分配上有不同的地址空間,這會導致在不同的虛擬機中訪問同一個類的物件會產生多份副本,比如常用例子(通過開啟多行程獲取更大記憶體空間、兩個或者多個應用之間共享資料、微信全家桶)

一般來說,使用多行程通信會造成如下幾方面的問題:

  • 靜態成員和單例模式完全失效:獨立的虛擬機造成
  • 執行緒同步機制完全實效:獨立的虛擬機造成
  • SharedPreferences的可靠性下降:這是因為Sp不支持兩個行程并發進行讀寫,有一定幾率導致資料丟失
  • Application會多次創建:Android系統在創建新的行程會分配獨立的虛擬機,所以這個程序其實就是啟動一個應用的程序,自然也會創建新的Application

4、Android中IPC方式、各種方式優缺點,為什么選擇Binder?

參考回答:

與Linux上傳統的IPC機制,比如System V,Socket相比,Binder好在哪呢?

傳輸效率高、可操作性強:傳輸效率主要影響因素是記憶體拷貝的次數,拷貝次數越少,傳輸速率越高,從Android行程架構角度分析:對于訊息佇列、Socket和管道來說,資料先從發送方的快取區拷貝到內核開辟的快取區中,再從內核快取區拷貝到接收方的快取區,一共兩次拷貝,如圖:

而對于Binder來說,資料從發送方的快取區拷貝到內核的快取區,而接收方的快取區與內核的快取區是映射到同一塊物理地址的,節省了一次資料拷貝的程序,如圖:

由于共享記憶體操作復雜,綜合來看,Binder的傳輸效率是最好的,

實作C/S架構方便:Linux的IPC方式除了Socket以外都不是基于C/S架構,而Socket主要用于網路間的通信且傳輸效率較低,Binder基于C/S架構 ,Server端與Client端相對獨立,穩定性較好,

安全性高:傳統Linux IPC的接收方無法獲得對方行程可靠的UID/PID,從而無法鑒別對方身份;而Binder機制為每個行程分配了UID/PID且在Binder通信時會根據UID/PID進行有效性檢測,

5、Binder機制的作用和原理?

參考回答:Linux系統將一個行程分為用戶空間和內核空間,對于行程之間來說,用戶空間的資料不可共享,內核空間的資料可共享,為了保證安全性和獨立性,一個行程不能直接操作或者訪問另一個行程,即Android的行程是相互獨立、隔離的,這就需要跨行程之間的資料通信方式,

一次完整的 Binder IPC 通信程序通常是這樣:

  • 首先 Binder 驅動在內核空間創建一個資料接收快取區;

  • 接著在內核空間開辟一塊內核快取區,建立內核快取區和內核中資料接收快取區之間的映射關系,以及內核中資料接收快取區和接收行程用戶空間地址的映射關系;

  • 發送方行程通過系統呼叫 copyfromuser() 將資料 copy 到內核中的內核快取區,由于內核快取區和接收行程的用戶空間存在記憶體映射,因此也就相當于把資料發送到了接收行程的用戶空間,這樣便完成了一次行程間的通信,

6、Binder框架中ServiceManager的作用?

參考回答:Binder框架 是基于 C/S 架構的,由一系列的組件組成,包括 Client、Server、ServiceManager、Binder驅動,其中 Client、Server、Service Manager 運行在用戶空間,Binder 驅動運行在內核空間

Server&Client:服務器&客戶端,在Binder驅動和Service Manager提供的基礎設施上,進行Client-Server之間的通信,

ServiceManager(如同DNS域名服務器)服務的管理者,將Binder名字轉換為Client中對該Binder的參考,使得Client可以通過Binder名字獲得Server中Binder物體的參考,

Binder驅動(如同路由器):負責行程之間binder通信的建立,傳遞,計數管理以及資料的傳遞互動等底層支持,

圖片出自Carson_Ho文章 —— Android跨行程通信:圖文詳解 Binder機制 原理

7、Bundle傳遞物件為什么需要序列化?Serialzable和Parcelable的區別?

參考回答:因為bundle傳遞資料時只支持基本資料型別,所以在傳遞物件時需要序列化轉換成可存盤或可傳輸的本質狀態(位元組流),序列化后的物件可以在網路、IPC(比如啟動另一個行程的Activity、Service和Reciver)之間進行傳輸,也可以存盤到本地,

序列化實作的兩種方式:實作Serializable/Parcelable介面,不同點如圖:

8、講講AIDL?原理是什么?如何優化多模塊都使用AIDL的情況?

參考回答:AIDL(Android Interface Definition Language,Android介面定義語言):如果在一個行程中要呼叫另一個行程中物件的方法,可使用AIDL生成可序列化的引數,AIDL會生成一個服務端物件的代理類,通過它客戶端實作間接呼叫服務端物件的方法,

AIDL的本質是系統提供了一套可快速實作Binder的工具,關鍵類和方法:

  • AIDL介面:繼承IInterface,

  • Stub類:Binder的實作類,服務端通過這個類來提供服務,

  • Proxy類:服務器的本地代理,客戶端通過這個類呼叫服務器的方法,

  • asInterface():客戶端呼叫,將服務端的回傳的Binder物件,轉換成客戶端所需要的AIDL介面型別物件,如果客戶端和服務端位于統一行程,則直接回傳Stub物件本身,否則回傳系統封裝后的Stub.proxy物件

  • asBinder():根據當前呼叫情況回傳代理Proxy的Binder物件,

  • onTransact():運行服務端的Binder執行緒池中,當客戶端發起跨行程請求時,遠程請求會通過系統底層封裝后交由此方法來處理,

  • transact():運行在客戶端,當客戶端發起遠程請求的同時將當前執行緒掛起,之后呼叫服務端的onTransact()直到遠程請求回傳,當前執行緒才繼續執行,

當有多個業務模塊都需要AIDL來進行IPC,此時需要為每個模塊創建特定的aidl檔案,那么相應的Service就會很多,必然會出現系統資源耗費嚴重、應用過度重量級的問題,解決辦法是建立Binder連接池,即將每個業務模塊的Binder請求統一轉發到一個遠程Service中去執行,從而避免重復創建Service,

  • 作業原理:每個業務模塊創建自己的AIDL介面并實作此介面,然后向服務端提供自己的唯一標識和其對應的Binder物件,服務端只需要一個Service,服務器提供一個queryBinder介面,它會根據業務模塊的特征來回傳相應的Binder物件,不同的業務模塊拿到所需的Binder物件后就可進行遠程方法的呼叫了

View

1、講下View的繪制流程?

參考回答:View的作業流程主要是指measure、layout、draw這三大流程,即測量、布局和繪制,其中measure確定View的測量寬/高,layout確定View的最終寬/高和四個頂點的位置,而draw則將View繪制到螢屏上

View的繪制程序遵循如下幾步:

  • 繪制背景 background.draw(canvas)
  • 繪制自己(onDraw)
  • 繪制 children(dispatchDraw)
  • 繪制裝飾(onDrawScollBars)

2、MotionEvent是什么?包含幾種事件?什么條件下會產生?

參考回答:MotionEvent是手指接觸螢屏后所產生的一系列事件,典型的事件型別有如下:

  • ACTION_DOWN:手指剛接觸螢屏
  • ACTION_MOVE:手指在螢屏上移動
  • ACTION_UP:手指從螢屏上松開的一瞬間
  • ACTION_CANCELL:手指保持按下操作,并從當前控制元件轉移到外層控制元件時觸發

正常情況下,一次手指觸摸螢屏的行為會觸發一系列點擊事件,考慮如下幾種情況:

  • 點擊螢屏后松開,事件序列:DOWN→UP
  • 點擊螢屏滑動一會再松開,事件序列為DOWN→MOVE→.....→MOVE→UP

3、描述一下View事件傳遞分發機制?

參考回答:View事件分發本質就是對MotionEvent事件分發的程序,即當一個MotionEvent發生后,系統將這個點擊事件傳遞到一個具體的View上

點擊事件的傳遞順序:Activity(Window)→ViewGroup→ View

事件分發程序由三個方法共同完成:

  • dispatchTouchEvent:用來進行事件的分發,如果事件能夠傳遞給當前View,那么此方法一定會被呼叫,回傳結果受當前View的onTouchEvent和下級View的dispatchTouchEvent方法的影響,表示是否消耗當前事件

  • onInterceptTouchEvent:在上述方法內部呼叫,對事件進行攔截,該方法只在ViewGroup中有,View(不包含 ViewGroup)是沒有的,一旦攔截,則執行ViewGroup的onTouchEvent,在ViewGroup中處理事件,而不接著分發給View,且只呼叫一次,回傳結果表示是否攔截當前事件

  • onTouchEvent:在dispatchTouchEvent方法中呼叫,用來處理點擊事件,回傳結果表示是否消耗當前事件

4、如何解決View的事件沖突 ?舉個開發中遇到的例子 ?

參考回答:常見開發中事件沖突的有ScrollView與RecyclerView的滑動沖突、RecyclerView內嵌同時滑動同一方向

滑動沖突的處理規則:

  • 對于由于外部滑動和內部滑動方向不一致導致的滑動沖突,可以根據滑動的方向判斷誰來攔截事件,

  • 對于由于外部滑動方向和內部滑動方向一致導致的滑動沖突,可以根據業務需求,規定何時讓外部View攔截事件,何時由內部View攔截事件,

  • 對于上面兩種情況的嵌套,相對復雜,可同樣根據需求在業務上找到突破點,

滑動沖突的實作方法:

  • 外部攔截法:指點擊事件都先經過父容器的攔截處理,如果父容器需要此事件就攔截,否則就不攔截,具體方法:需要重寫父容器的onInterceptTouchEvent方法,在內部做出相應的攔截,

  • 內部攔截法:指父容器不攔截任何事件,而將所有的事件都傳遞給子容器,如果子容器需要此事件就直接消耗,否則就交由父容器進行處理,具體方法:需要配合requestDisallowInterceptTouchEvent方法,

5、scrollTo()和scollBy()的區別?

參考回答:

  • scollBy內部呼叫了scrollTo,它是基于當前位置的相對滑動;而scrollTo是絕對滑動,因此如果使用相同輸入引數多次呼叫scrollTo方法,由于View的初始位置是不變的,所以只會出現一次View滾動的效果

  • 兩者都只能對View內容的滑動,而非使View本身滑動,可以使用Scroller有過度滑動的效果

6、Scroller是怎么實作View的彈性滑動?

參考回答:

  • 在MotionEvent.ACTION_UP事件觸發時呼叫startScroll()方法,該方法并沒有進行實際的滑動操作,而是記錄滑動相關量(滑動距離、滑動時間)

  • 接著呼叫invalidate/postInvalidate()方法,請求View重繪,導致View.draw方法被執行

  • 當View重繪后會在draw方法中呼叫computeScroll方法,而computeScroll又會去向Scroller獲取當前的scrollX和scrollY;然后通過scrollTo方法實作滑動;接著又呼叫postInvalidate方法來進行第二次重繪,和之前流程一樣,如此反復導致View不斷進行小幅度的滑動,而多次的小幅度滑動就組成了彈性滑動,直到整個滑動程序結束

7、 invalidate()和postInvalidate()的區別 ?

參考回答:invalidate()與postInvalidate()都用于重繪View,主要區別是invalidate()在主執行緒中呼叫,若在子執行緒中使用需要配合handler;而postInvalidate()可在子執行緒中直接呼叫,

8、SurfaceView和View的區別?

  • View需要在UI執行緒對畫面進行重繪,而SurfaceView可在子執行緒進行頁面的重繪

  • View適用于主動更新的情況,而SurfaceView適用于被動更新,如頻繁重繪,這是因為如果使用View頻繁重繪會阻塞主執行緒,導致界面卡頓

  • SurfaceView在底層已實作雙緩沖機制,而View沒有,因此SurfaceView更適用于需要頻繁重繪、重繪時資料處理量很大的頁面(如視頻播放界面)

9、自定義View如何考慮機型適配 ?

  • 合理使用warp_content,match_parent
  • 盡可能的是使用RelativeLayout
  • 針對不同的機型,使用不同的布局檔案放在對應的目錄下,android會自動匹配,
  • 盡量使用點9圖片,
  • 使用與密度無關的像素單位dp,sp
  • 引入android的百分比布局,
  • 切圖的時候切大解析度的圖,應用到布局當中,在小解析度的手機上也會有很好的顯示效果,

最后

今天分享的面試題就到這里,還是那句話,有些東西你不僅要懂,而且要能夠很好地表達出來,能夠讓面試官認可你的理解,例如Handler機制,這個是面試必問之題,有些晦澀的點,或許它只活在面試當中,實際作業當中你壓根不會用到它,但是你要知道它是什么東西,

不管怎么樣,不論是什么樣的大小面試,要想不被面試官虐的不要不要的,只有刷爆面試題題做好全面的準備,當然除了這個還需要在平時把自己的基礎打扎實,這樣不論面試官怎么樣一個知識點里往死里鑿,你也能應付如流啊~

鑒于看到很多小伙伴在轉發我的寫的文章,我最近也總結了幾套面試題,【小編在這分享總結的Java面試高頻的面試題(包括了Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技術堆疊)都進行了整理以及打包整合,上述面試題答案都整理成檔案筆記, 也還整理了一些面試資料&最新2020收集的一些大廠的面試真題(都整理成檔案,小部分截圖),有需要的可以 點擊進入 查看領取資料, 】以下是面試資料部分截圖:

點關注,不迷路!如果本文對你有幫助的話不要忘記點贊支持哦!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188422.html

標籤:java

上一篇:2020淘寶11.11養貓攻略+領喵幣自動腳本

下一篇:2020雙十一領喵幣自動做任務

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more