⑴ 大廠數據分析面試題,大數據結構化面試
作為程序員,你認為代碼只要實現功能就可以了嗎?
其實,工作2~3年後,你會陪蠢發現隨著工作的深入,工作中遇到的問題會變大,處理的數據量也會變大。
一開始,我可能會耐心加班,等機器處理好了再回家,但最後,處理完這些數據通常是在深夜。
面對這樣的問題,其實可以用數據結構解決。 仔細整理開發中遇到的問題,會發現很多工作中的問題,用簡單的邏輯就能解決。
舉個例子,你很熟悉。 如何實時統計99%的業務介面響應時間?
您可能會首先想到,每次查詢時,都會按照從小到大的順序對所有響應時間進行排序。 如果總共有1200個數據,第1188個數據將有99%的響應時間。
很明顯,每次用這種方法查詢都要排序,效率非常低。
但是,如果知道「堆」數據結構,兩個堆就可以非常有效地解決這個問題。
因此,數據結構是提高我們程序員工作效率的利器!
另外,已經工作了2到3年的你,可能想跳槽進入大工廠。
但是,當你去面試時,你經常會碰到數據結構和演算法的主題。
目前,數據結構和演算法是許多知名企業面試的必考問題。
國內外各大互聯網公司在面試過程中,都多少聽說了一些有關數據結構和演算法的主題。
而且,規模越大的公司,越重視數據結構和演算法。
例如,2019年6月,阿裡面試中涉及的數據結構主題:
2019年華為面試涉及的數據結構主題:
目前,許多中小企業的面試問題都涉瞎盯及數據結構知識。
其實,你會發現,即使是大小公司,為了篩選更優秀的人磨亂和才,面試問題的難度也會越來越大。
因此,數據結構是進入大廠的重要門檻。
總之,如果你想提高工作效率,進入更大的公司,數據結構和演算法是你必須跨越的一道坎。
從易傳傳媒、亞信、奧鵬教育、程序員到架構師再到技術經理樊延欣老師,前後六年通過各種工作方式打好數據結構基礎,在過程中梳理了許多心得,進行了深入思考。
和樊延欣老師一起,死戰數據結構,跳過代碼陷阱,盡快完成數據結構通關,有機會升職更好。
掃描堆場上的二維碼,點擊組,立即搶購
原價69元,限時優惠49元
老師怎麼解釋這門課?#
老師介紹枯燥抽象的結構規則用詳細的方法映射到實際項目中。 然後盡量脫離復雜的數學基礎,在許多常見的應用場合映射相關理論,降低學習者的理解門檻,使其零基礎也能學習。
同時,該課程至少涵蓋了50%常見互聯網公司中數據結構方面的面試問題綱領,序列和棧是基礎性主題,樹是更高級的主題,可以理解和把握,發揮面試信心,更上一層樓
#課程介紹#
#我能得到什麼? #
1、提高編程效率和質量
熟悉數據結構原理,復雜的項目無需為需求實現原理而煩惱。
2、優化能力提升
隨著了解的加深,能夠發現與工作中數據結構特性相違背的代碼,並具有優化修改的能力。
3、提高面試成功率
學習50%以上互聯網公司數據結構的面試問題綱領,提高面試合格率。
#使用者群組#
1、開發業務系統2年,有相關項目經驗,不斷重復製作業務車輪希望提高的程序員。
有2、3~5年開發經驗,但基礎不牢固,想改變體系結構的程序員。
3、基礎扎實,需要大量用例和思考才能鞏固基礎的優秀畢業生/在校生。
#新課初優惠#
限時49元
(成本69 )。
每百人加價十元
第26節課,平均每課2元,持續一個月,改變報關大廠面試機會
享受七折的折扣
自考/成考有疑問、不知道自考/成考考點內容、不清楚當地自考/成考政策,點擊底部咨詢官網老師,免費領取復習資料:https://www.87dh.com/xl/
⑵ 華為的一道面試題目,請幫忙看看
首先批評 鬼火狼煙 的答案
java里針對String的 + += 編譯器會自動將String轉化成StringBuffer
《java編程思想 第2版》里 附錄A:對象的傳遞和返回
中文版759頁
英文版1054頁
重載後的「+」 以及StringBuffer 小節里說
String 類的對象被設計為恆常的,並使用了前面介紹的伴隨類技術。如果查看 JDK 文檔中
的 String 類(稍後會對此進行總結),你會發現,類中每個設計修改 String 的方法,在
修改的過程中,確實生成並返回了一批新的 String 對象。最初的 String 並沒有受到影響。
C++的 const 提供由編譯器支持的對象恆常性,Java 沒有這樣的功能。想要獲得恆常對
象,你必須自己動手,就像 String 那樣。
由於 String 對象是恆常的,對某個 String 可以隨意取多個別名。因為它是只讀的,任何
引用也不可能修改該對象,也就不會影響其他引用。所以,只讀對象很好地解決了別名問
題。
這似乎可以解決所有問題。每當需要修改對象時,就創建一堆修改過的新版對象,如同
String那樣。然而,對某些操作而言,這太沒有效率了。String的重載操作符』+』就是個重
要的例子。重載是指,對特定的類,』+』被賦予額外的含義。(為String重載的』+』和』+=』,
是Java唯一重載的操作符,而且Java不允許程序員重載其他操作符。)
使用 String 對象時,』+』用來連接 String 對象:
String s = "abc" + foo + "def" + Integer.toString(47);
你可以想像它是如何工作的。String 「abc」可能有一個 append()方法,它生成了一個連接
了」abc」和 foo 的新的 String 對象。新的 String 連接」def」之後,生成另一個新的 String,
依此類推。
C++允許程序員任意重載操作符。因為這通常是很復雜的過程,Java設計者認為這是「糟糕的」功能,
不應該包括在Java
中。它其實並沒有那麼糟糕,具有諷刺意味的是,比起C++來,在Java中使用操作符重載容易多了。
這當然可以運行,但它需要大量的中間 String 對象,才能生成最終的新 String,而那些中
間結果需要作垃圾回收。我懷疑 Java 的設計者起先就是這么做的(這是軟體設計中的一個
教訓,你無法知道所有事情,直到形成代碼,並運作起來)。我猜他們發現了這種做法有
著難以忍受的低效率。
解決之道是可變的伴隨類,類似前面演示的例子。String 的伴隨類稱作 StringBuffer,在
計算某些表達式,特別是 String 對象使用重載過的』+』和』+=』時,編譯器會自動創建
StringBuffer。下面的例子說明其中發生了什麼:
//: appendixa:ImmutableStrings.java
// Demonstrating StringBuffer.
import com.bruceeckel.simpletest.*;
public class ImmutableStrings {
private static Test monitor = new Test();
public static void main(String[] args) {
String foo = "foo";
String s = "abc" + foo + "def" + Integer.toString(47);
System.out.println(s);
// The "equivalent" using StringBuffer:
StringBuffer sb =
new StringBuffer("abc"); // Creates String!
sb.append(foo);
sb.append("def"); // Creates String!
sb.append(Integer.toString(47));
System.out.println(sb);
monitor.expect(new String[] {
"abcfoodef47",
"abcfoodef47"
});
}
} ///:~
在生成 String s 的過程中,編譯器使用 sb 執行了大致與下面的工作等價的代碼:創建一
個 StringBuffer,使用 append()向此 StringBuffer 對象直接添加新的字元串(而不是每
次製作一個新的副本)。雖然這種方法更高效,但是對於引號括起的字元串,例如」abc」
和」def」,它並不起作用,編譯器會將其轉為 String 對象。所以,盡管 StringBuffer 提供
了更好的效率,可能仍會產生超出你預期數量的對象。
String 和 StringBuffer 類
下面總結了 String 與 StringBuffer 都可用的方法,你可以感受到與它們交互的方式。表
中並未包含所有方法,只包含了與本討論相關的重要方法。重載的方法被置於單獨一列。
首先是 String 類:
方法 參數,重載 用途
Constructor 重載: 預設、空參數、 創建 String 對象。
String、StringBuffer、
char 數組、byte 數組.
length( ) String 的字元數。
charAt( ) int 索引 在 String 中指定位置的
字元。
getChars( ), 復制源的起點與終點、 復 復制 char 或 byte 到外部
getBytes( ) 制的目標數組、目標數組的 數組。
索引。
toCharArray( ) 生成 char[],包含 String
的所有字元。
equals( ), 做比較的 String 兩個 String 的等價測試。
equals-IgnoreCase( )
compareTo( ) 做比較的 String 根據詞典順序比較 String
與參數,結果為負值、零、
或正值。大小寫有別。
indexOf( ), 重載: char、char 和起 如果當前 String 中不包含
lastIndexOf( ) 始索引、String、String 參數,返回-1,否則返回參
和起始索引. 數在 String 中的位置索引。
LastIndexOf()由末端反
向搜索。
substring( ) 重載: 起始索引、起始索引 返回新的 String 對象,包
和終止索引 含特定的字元集。
concat( ) 要連接的 String 返回新 String 對象,在原
String 後追加參數字元。
replace( ) 搜索的舊字元,用來替代的 返回指定字元被替換後的新
新字元 String 對象。如果沒有發生
替換,返回原 String。
成一個且僅生成一個 String
引用。
可以看到,當必須修改字元串的內容時,String的每個方法都會謹慎地返回一個新的String
對象。還要注意,如果內容不需要修改,方法會返回指向源 String 的引用。這節省了存儲
空間與開銷。
以下是 StringBuffer 類:
方法 參數, 重載 用途
Constructor 重載: 空參數、要創建的緩沖區 創建新的 StringBuffer
長度、String 的來源. 對象。
toString( ) 由此 StringBuffer 生成
String。
length( ) StringBuffer 中的字元
個數。
setLength( ) 代表緩沖區中字元串長度的整數 截短或擴展原本的字元串。
如果擴展,以 null 填充新
增的空間。
charAt( ) 代表所需元素位置的整數。 返回 char 在緩沖區中的
位置。
setCharAt( ) 代表所需元素位置的整數,和新 修改某位置上的值。
的 char 值
getChars( ) 復制源的起點與終點、復制的目 復制 char 到外圍數組。沒
的端數組、目的端數組的索引。 有 String 中的
getBytes( ) 。
append( ) 重載: Object、String、 參數轉為字元串,然後追加
char[]、char[] 和偏移和長 到當前緩沖區的末端,如果
度、boolean、char、int、 必要,緩沖區會擴大。
long、float、double.
insert( ) 被重載過,第一個參數為插入起 第二個參數轉為字元串,插
始點的偏移值: Object、 入到當前緩沖區的指定位
String、char[]、boolean、置。如果必要,緩沖區會擴
char、int、long、float、 大。
double.
最常用的方法是 append(),當計算包含』+』和』+=』操作符的 String 表達式時,編譯器會使
用它。Insert()方法有類似的形式,這兩個方法都會在緩沖區中進行大量操作,而不需創建
新對象。
String 是特殊的
到目前為止,你已經看到了,String 類不同於 Java 中一般的類。 String 有很多特殊之處,
它不僅僅只是一個 Java 內置的類,它已經成為 Java 的基礎。而且事實上,雙引號括起的
字元串都被編譯器轉換為 String 對象,還有專門重載的』+』和』+=』操作符。在本附錄中,
你還能看到其他特殊之處:使用伴隨類 StringBuffer 精心建構的恆常性,以及編譯器中的
一些額外的魔幻式的功能。
/**********
對象操作效率低下
況且java的對象都在堆里
原文對對象重復進行操作
純粹是傻瓜蛋行為
**********/
// **********************************************************
public static String countStr(int count)
{
char ch [ ] = new char[count];
for(int i = 0; i < count; i++)
ch [i] = 'A';
String str = new String(ch);
return str;
}
// **********************************************************
⑶ 2022年python技術類面試題總結(面試題+答案解析)
這是一位有著五年 Python 經驗的好友最近對 Python 崗位面試後的一篇經驗總結,從 Python 就業方向到 Python 面試題。
Python 就業方向 :
下面是 Python 面試知識點,總結了華為、阿里巴巴等互聯網公司 Python 常問面試題。每道題都提供參考答案,希望能夠幫助你在求職面試中脫穎而出,找到一份高薪工作。
這些面試題分為 Python 基礎和 Python高級,內容包含: 基礎語法、文件操作、模塊與包、數據類型、元類、內存管理與垃圾回收機制以及 Python 函數 等知識點。
(一) Python 基礎語法
(二) 文件操作
(三) 模塊與包
(四) 數據類型
(五)企業面試題
(一) 元類
(二)內存管理與垃圾回收機制
(三)函數
(四) 面向對象
由於篇幅有限,這份 Python 面試寶典已經被整理成了PDF文檔,有需要 Python 面試寶典全套完整文檔(面試題+答案解析)的可以 免費領取!
⑷ 華為面試的經典問題及回答思路
導語:華為技術有限公司是一家生產銷售通信設備的民營通信科技公司,其產品主要涉及通信網路中的交換網路、傳輸網路、無線及有線固定接入網路和數據通信網路及無線終端產品,為世界各地通信運營商及專業網路擁有者提供硬體設備、軟體、服務和解決方案。
問題一:“請你自我介紹一下”
■思路:
1、這是面試的必考題目。
2、介紹內容要與個人簡歷相一致。
3、表述方式上盡量口語化。
4、要切中要害,不談無關、無用的內容。
5、條理要清晰,層次要分明。
6、事先最好以文字的形式寫好背熟。
問題二:“談談你的家庭情況”
■思路:
1、況對於了解應聘者的性格、觀念、心態等有一定的作用,這是招聘單位問該問題的主要原因。
2、簡單地羅列家庭人口。
3、宜強調溫馨和睦的家庭氛圍。
4、宜強調父母對自己教育的重視。
5、宜強調各位家庭成員的良好狀況。
6、宜強調家庭成員對自己工作的支持。
7、宜強調自己對家庭的責任感。
問題三:“你有什麼業余愛好?”
■思路:
1、業余愛好能在一定程度上反映應聘者的性格、觀念、心態,這是招聘單位問該問題的主要原因。
2、最好不要說自己沒有業余愛好。
3、不要說自己有那些庸俗的、令人感覺不好的愛好。
4、最好不要說自己僅限於讀書、聽音樂、上網,否則可能令面試官懷疑應聘者性格孤僻。
5、最好能有一些戶外的業余愛好來“點綴”你的形象。
問題四:“你最崇拜誰?”
■思路:
1、最崇拜的人能在一定程度上反映應聘者的性格、觀念、心態,這是面試官問該問題的主要原因。
2、不宜說自己誰都不崇拜。
3、不宜說崇拜自己。
4、不宜說崇拜一個虛幻的、或是不知名的人。
5、不宜說崇拜一個明顯具有負面形象的人。
6、所崇拜的人人最好與自己所應聘的工作能“搭”上關系。
7、最好說出自己所崇拜的人的哪些品質、哪些思想感染著自己、鼓舞著自己。
問題五:“你的座右銘是什麼?”
■思路:
1、座右銘能在一定程度上反映應聘者的性格、觀念、心態,這是面試官問這個問題的主要原因。
2、不宜說那些醫引起不好聯想的座右銘。
3、不宜說那些太抽象的座右銘。
4、不宜說太長的座右銘。
5、座右銘最好能反映出自己某種優秀品質。
6、參考答案——“只為成功找方法,不為失敗找借口”
⑸ python實現M-C問題的A*演算法,採用h(n)=m+c-2b(或具有更多啟發信息的)作為啟發
M-C問題是一個經典的人工智慧問題,它描述了一個傳教士和食人族的河岸過河問題。A*演算法是一種啟發式搜索演算法,它可以找到從初始狀態到目標狀態的最優路徑。A*演算法的核心是使用一個函數f(n)來評估每個狀態的優先順序,f(n)等於g(n)和h(n)的和,其中g(n)是從初始狀態到當前狀態的實際代價,h(n)是從當前狀態到目標狀態的預估代價。h(n)越接近真實代價,A*演算法越有效。
為了用Python實現M-C問題的A*演算法,我們需要定義以下幾個部分:
- 狀態:一個狀態是一個三元組(m, c, b),型腔表示河的左岸有m個傳教士,c個食人族,b為1表示旅唯船在左岸,為0表示船在右岸。
- 初始狀態:(3, 3, 1),表示左岸有3個傳教士,3個食人族,船在左岸。
- 目標狀態:(0, 0, 0),表示左岸沒有傳教士,沒有食人族,船在右岸。
- 操作:一個操作是一個二元組(x, y),表示從當前岸向另一岸運送x個傳教士,y個食人族,滿足以下條件:
- 0 <= x <= 1,0 <= y <= 2,x + y <= 2,x + y > 0,表示每次最多運送兩個人,最少運送一個人,可以是傳教士或者食人族。
- 如果b為1,表示船在左岸,那麼m >= x,c >= y,表示不能運送超過當前岸的人數。
- 如果b為0,表示船在右岸,那麼m <= 3 - x,c <= 3 - y,表示不能運送超過另一岸的人數。
- 在任何一岸,傳教士的人數不能少於食人族的人數,除非傳教士的人數為0,表示不會被吃掉。
- g(n):從初始狀態到當前狀態的實際代價,可以簡單地定義為已經運送的人數。
- h(n):從當前狀態到目標狀態的預估代價,可以根據題目給出的公式定義為h(n) = m + c - 2b,或者使用其他更有啟發性的公式,例如h(n) = max(m, c) - b,表示至少需要運送的次數。
Python代碼實現:
```python
# 定義狀態類
class State:
def __init__(self, m, c, b):
self.m = m # 左岸的傳教士數
self.c = c # 左岸的食人族數
self.b = b # 船的位置,1為左岸,0為右岸
def __eq__(self, other):
# 判斷兩個狀態是否相等
return self.m == other.m and self.c == other.c and self.b == other.b
def __hash__(self):
# 為了將狀態作為字典的鍵,需要定義哈希函數
return hash((self.m, self.c, self.b))
def __str__(self):
# 為了方便列印狀態卜鎮衫,需要定義字元串表示
return f"({self.m}, {self.c}, {self.b})"
def is_valid(self):
# 判斷一個狀態