面試官問你編碼相關的面試題,把這篇甩給他就完事!
前情回顧:Java中一個字元佔兩位元組 但為什麼new String("字").getBytes().length 返回3個位元組
今天主要聊一聊:
- 位元組
- 字元
- 字符集
- 編碼
- 字元編碼
- Java 內碼和外碼
- Unicode
位元組
例如 :00001111 這個8位二進位制數就佔了一個位元組的儲存容量。
位元組(英語:Byte),通常用作計算機資訊計量單位,不分資料型別。 一個位元組代表八個位元(英語:Bit)。這個是最基本的概念了,位元組是計算儲存容量的一種計量單位,計算機只能識別1和0組成的二進位制位。一個數就是1位(bit),為了方便計算,我們規定8位就是一個位元組。
例如 :00001111 這個8位二進位制數就佔了一個位元組的儲存容量。
字元
字元和位元組不太一樣,任何一個文字或符號都是一個字元,但所佔位元組不一定,不同的編碼導致一個字元所佔的記憶體不同。字元是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。 也就是說,一個數字是一個字元,一個文字是一個字元,一個標點符號也是一個字元。
1 是 字元,“漢” 是字元,“!”感嘆號是字元。
字符集
charset 是 character set 的簡寫,即字符集。字元的集合就叫字符集。ASCII字符集就是下表中的字元那一列的所有字元的集合。
編碼
編碼是一個非常寬泛的概念!雖然我們一直用編碼特指字符集編碼,但這只是一種狹義的理解,廣義的理解則有很多:
- 文字是對聲音的編碼
- 照相機,攝像機把光訊號編碼成影象及視訊
- 我們還經常能看到條形碼,二維碼,這些都是編碼
著名的摩爾斯電碼其實也是一種編碼:
在圖片中,M的編碼就是“━ ━”,其它類似。
字元編碼 是 編碼的一種情況,不過我們學計算機的說到編碼就是字元編碼。
字元編碼
encoding 是 charset encoding 的簡寫,即字符集編碼,簡稱編碼。定義字符集中的字元如何編碼為特定的二進位制數,以便在計算機中儲存(就是將字元在字符集中的對應位置化為二進位制)。
字符集和字元編碼一般一 一對應,Unicode字符集例外,因為Unicode字符集有三種編碼方式(utf-8,utf-16,utf-32)
字元編碼 和 字符集的區別
與介面及介面實現的對比
可以把這兩者與介面及介面實現做個對比:
從這裡可以很清楚地看到,
- 編碼是依賴於字符集的,就像程式碼中的介面實現依賴於介面一樣;
- 一個字符集可以有多個編碼實現,就像一個介面可以有多個實現類一樣。
Java中 內碼和外碼
簡單來說
- 內碼:char或String在記憶體裡使用的編碼方式。
- 外碼:除了內碼都可以認為是“外碼”。(包括class檔案的編碼)
java內碼:unicode(utf-16)
jvm預設外碼:
- windows——gbk
- Linux——utf-8
為什麼Unicode這麼特殊?
人們弄出新的字符集標準,驅動力無外乎是舊的字符集裡的字元不夠用了。
Unicode 的目標是統一所有的字符集,囊括所有的字元,粗略估算為 17×6萬=102 萬,所以字符集發展到它這裡就到頭了,再去整什麼新的字符集就沒必要也不應該了,102萬目前已經完全夠用了。
但如果覺得它現有的編碼方案不太好呢?在不能弄出新的字符集情況下,只能在編碼方面做文章了,於是就有了多個實現,這樣一來傳統的一一對應關係就打破了。
比如說UTF-32編碼,哪怕是00000000 00000000 00000000 00001111這種其實只佔了1個位元組的字元,我們也要為他分配4個位元組的空間,這就導致一個可以用1G儲存的檔案,現在需要4G才能儲存,這是極其浪費的做法。
於是某位大牛覺得UTF-32編碼太浪費空間了吧,於是大牛就做出了UTF-8、UTF-16編碼方案(這裡就是舉個例子,可能大牛就是搞出來玩,具體原因無從考究)
淺談Unicode
參考
- https://baike.baidu.com/item/ASCII/309296?fr=aladdin
- https://www.cnblogs.com/Xieyang-blog/p/9401999.html
- https://blog.csdn.net/qq_42068856/article/details/83792174
- https://wikipedia.hk.wjbk.site/
- https://xiaogd.net/
- https://blog.csdn.net/zhongguomao/article/details/54405637
本文首發於微信公眾號:程式設計師喬戈裡
如果是頭條使用者,可以在我的頭條號程式設計師喬戈裡後臺回覆 資源獲取價值59998元的程式設計和考研資料
覺得文章不錯的歡迎關注我的WX公眾號:程式設計師喬戈裡
我是BAT大廠後臺開發工程師,,專注分享技術乾貨/程式設計資源/求職面試/成長感悟等,關注送5000G程式設計資源和自己整理的一份幫助不少人拿下java的offer的面經附答案,免費下載CSDN資源。
相關推薦
面試官問你編碼相關的面試題,把這篇甩給他就完事!
前情回顧:Java中一個字元佔兩位元組 但為什麼new String("字").getBytes().length 返回3個位元組 今天主要聊一聊: 位元組 字元 字符集 編碼 字元編碼 Java 內碼和外碼 Unicode 位元組 例如 :00001111 這個8位二進位制數就佔了一個位元組的儲
再有人問你分布式事務,把這篇扔給他
消息 重新 事務所 啟動數據庫 最終一致性 結合 分布式處理 凍結資金 ima 前言 不知道你是否遇到過這樣的情況,去小賣鋪買東西,付了錢,但是店主因為處理了一些其他事,居然忘記你付了錢,又叫你重新付。又或者在網上購物明明已經扣款,但是卻告訴我沒有發生交易。這一系列情況都是
Tomcat相關面試題,看這篇就夠了!保證能讓面試官顫抖!
Tomcat相關的面試題出場的機率並不高,正式因為如此,很多人忽略了對Tomcat相關技能的掌握。 這次整理了Tomcat相關
面試再問值傳遞與引用傳遞,把這篇文章砸給他!
java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的方法引數,那麼我們先來回顧一下在程式設計語言中有關引數傳遞給方法(或函式)的兩個專業術語: 按值呼叫(call by value)
再有人問你分散式事務,把這篇扔給他
前言不知道你是否遇到過這樣的情況,去小賣鋪買東西,付了錢,但是店主因為處理了一些其他事,居然忘記
如果有人問你 JFinal 如何整合 EhCache,把這篇文章甩給他
廢話不多說,就說一句:在 JFinal 中整合 EhCache,可以提高系統的併發訪問速度。 可能有人會問 JFinal 是什麼,EhCache 是什麼,簡單解釋一下。 JFinal 是一個基於Java 語言的極速 Web 開發框架,用起來非常爽,誰用誰知道。EhCache 是一個純 Java 的程序內快
當面試官問你Vue響應式原理,你可以這麼回答他
const Observer = function(data) { for (let key in data) { defineReactive(data, key); } } const defineReactive = function(obj, key) { const dep =
如果有人問你 Dubbo 中註冊中心工作原理,就把這篇文章給他
註冊中心作用 開篇首先想思考一個問題,沒有註冊中心 Dubbo 還能玩下去嗎? 當然可以,只要知道服務提供者地址相關資訊,消費者配置之後就可以呼叫。如果只有幾個服務,這麼玩當然沒問題。但是生產服務動輒成千上百,如果每個服務都需要手寫配置資訊,想象一下是多麼麻煩。 好吧,如果上面的問題都不是事的話,試想一下
Java面試常會被問到的經典面試題,學習或者求職,你都要好好掌握
cookie 異常類 shu data 區別 origin 目的 tro jdk和jre Java現在的熱度雖然有所下降,但是,學Java的人依舊很多。。Java的崗位也是滲透很多。那麽,那些經典的Java知識點,你能看到問題就能說出一二三嗎?來一起看看。。 1.JDK和
再也不用擔心面試官問你HashCode和equals了
結論 如果兩個物件相等,則hashcode()必須相等。 如果兩個物件相等,a.equals(b)==b.equals(a)==true 如果兩個物件有相同的hashcode值,他們也不一定是相等的。但若兩個物件相等,則hashCode值一定相等。 因此若equals()被覆
從一道簡單的“SpringBoot配置檔案”相關面試題,我就能知道你的水平
面試要套路,也要技巧。別被背題目的兄弟們給忽悠了。 【你來發揮】你比較喜歡什麼技術,哪一種最熟? 一般自信的面試官都喜歡問這個問題,這次面試的小夥比較年輕,咱也裝回B,不然都對不起自己。 答: 我比較喜歡Spring,比較有趣。目的: 希望應聘者能夠有廣
【漫畫】以後在有面試官問你AVL樹,你就把這篇文章扔給他。
背景 西天取經的路上,一樣上演著程式設計的樂趣..... 1、若它的左子樹不為空,則左子樹上所有的節點值都小於它的根節點值。 2、若它的右子樹不為空,則右子樹上所有的節點值均大於它的根節點值。 3、它的左右子樹也分別可以充當為二叉查詢樹。 例如:
【面試官問你】說說Android中的Service吧
Service是android中的四大元件之一,它是用於在後臺進行服務的,當應用程式在後臺掛起時,為了保證一些元件還能繼續工作而引入的,它既不是執行緒也不是程序,而是依靠應用主執行緒而存在的。 Service的啟動方法: 1.通過startService啟動後,這個ser
當面試官問你“業餘愛好”時如何巧妙回答呢?
“你有什麼業餘愛好?” 招聘者目的是:瞭解應聘者的性格、觀念、心態、思維的深度等。為了深入瞭解應聘者的愛好程度,我會提出更加深刻的問題,比如,應聘者喜歡流行音樂,我就會問相關的問題:“您什麼時候開始喜歡的?您最喜歡哪個歌手?她的演唱風格如何?她的成名曲是哪一首?您最喜歡
面試時,如果面試官問你怎樣看待加班,應該怎麼回答?
市場經濟機遇與挑戰並存,企業每臨重要關頭,為爭取主動搶佔先機而組織加班,作為員工應該充分理解,主動請戰保質保量加入突擊。當然作為企業應該努力避免此種狀況發生,突擊必然緊張 緊張產生忙亂,連續不斷地加班容易引起員工心理疲勞懈怠情緒,反而影響質量與效率。企業必須在管理上下功夫,努力做到高效八小時,達到緊湊有序
面試官問你斐波那契數列的時候不要高興得太早
前言 假如面試官讓你編寫求斐波那契數列的程式碼時,是不是心中暗喜?不就是遞迴麼,早就會了。如果真這麼想,那就危險了。 遞迴求斐波那契數列 遞迴,在數學與電腦科學中,是指在函式的定義中使用函式自身的方法。斐波那契數列的計算表示式很簡單: 1F(n) = n;
面試官問你“有什麽問題問我嗎?”,你該如何回答?
技術 很多 初心 使用 下載 朋友 後臺 都是 uri 我還記得當時我去參加面試的時候,幾乎每一場面試,特別是HR面和高管面的時候,面試官總是會在結尾問我:“問了你這麽多問題了,你有什麽問題問我嗎?”。這個時候很多人內心就會陷入短暫的糾結中:我該問嗎?不問的話面試官會不會對
面試官問你“有什麽問題問我嗎?”,你該如何回答
情況下 面試 入職 介紹 原因 tps 我會 tro 競爭 我還記得當時我去參加面試的時候,幾乎每一場面試,特別是HR面和高管面的時候,面試官總是會在結尾問我:“問了你這麽多問題了,你有什麽問題問我嗎?”。這個時候很多人內心就會陷入短暫的糾結中:我該
當面試官問你:如何進行效能優化?
問題背景 在開發好頁面後,如何讓頁面更快更好的執行,是區分一個程式猿技術水平和視野的一個重要指標。所以面試時,面試官總會問你一個問題,如何進行效能優化呢? 效能優化是什麼 從前端的角度來說,效能優化可以分為兩個方向。從使用者角度來看,一個是頁面載入的很快,另一個是頁面使用起來很流暢。因此,對效能優化的探索,我
面試官問你MyBatis SQL是如何執行的?把這篇文章甩給他
初識 MyBatis MyBatis 是第一個支援自定義 SQL、儲存過程和高階對映的類持久框架。MyBatis 消除了大部分 JDBC 的樣板程式碼、手動設定引數以及檢索結果。MyBatis 能夠支援簡單的 XML 和註解配置規則。使 Map 介面和 POJO 類對映到資料庫欄位和記錄。 MyBatis 的