1. 程式人生 > >面試官問你編碼相關的面試題,把這篇甩給他就完事!

面試官問你編碼相關的面試題,把這篇甩給他就完事!

前情回顧: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)

字元編碼 和 字符集的區別

與介面及介面實現的對比

可以把這兩者與介面及介面實現做個對比:

從這裡可以很清楚地看到,

  1. 編碼是依賴於字符集的,就像程式碼中的介面實現依賴於介面一樣;
  2. 一個字符集可以有多個編碼實現,就像一個介面可以有多個實現類一樣。

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 的