阿里編程題
1. 阿里筆試編程題沒做出來能進面試嗎
這方面根據單位具體的考察標准,包括權重分布,通常編程沒有做好的,很難進入面試環節。
2. 支付寶測開專家面經
如下:
阿里的面試流程包括簡歷評估、筆試、技術面試、hr面試四個環節。其中技術面根據不同的部門會有不同的規定。
簡歷評估:一般是在投簡歷之後,很快就會有人給你打電話,問一些問題,這個難度比正式的技術面稍微低一些,但還是要有所准備才行。
筆試:阿里的筆試有兩道題編程題,一個小時,時間有些緊張。我第一次沒答好,在第三輪技術面之後再補了一輪。
技術面試:我這次經歷了四輪技術面,其中前三輪的面試官都是我意向部門的工作人員,級別依次升高;第四輪是交叉面,就是其他部門的總監面的。總的來說,難度不小。
hr面:接到hr的電話面試,等待結果。
3. 如果阿里在線筆試的編程題不會做,只做了選擇題有可能過筆試嗎
不可能的,除非你選擇基本不錯
4. 阿里巴巴演算法工程師筆試題和c++職位有區別嗎
肯定有區別的,演算法工程師考察的多是數據結構,常用演算法(如神經網路等)
而C++主要是一門編程語言
5. 搜索編程題有沒有什麼軟體
先說結論:需要根據你想學什麼編程語言來選擇編程軟體。
看題主的提問應該對編程沒有太多的了解,姑且認為從來沒有接觸過編程吧。
估計題主說的編程軟體也就是說集成開發環境(IDE)吧,就是程序員寫代碼的軟體。
如果題主學的C語言或者c++的話,剛開始學慣用VC++6.0(免費),兩周後換CodeBlocks(免費),熟悉了之後用一兩個用,最後換成VisualStudioIDE。
如果題主學的是java的話,一開始用eclipse(免費),一兩個月後可以換IDEA.
如果題主學的是python的話,一開始用python安裝包自帶的就可以了(免費),一兩周後換PyCharm
如果題主學的是web前端(h5,js之類的),一開始可以用sublime(免費)或者hbuilder(免費),熟悉之後換webstorm。這里更新一下,也可以使用vscode搭配插件來使用。
下面我要開始啰嗦了:
首先你自己應該知道自己為什麼要學編程,或者說是說了編程之後要干什麼,這個很重要,決定著你以後學習的方向。打個比方,你說你想要學做飯,那麼你要學的是炒菜、糕點還是其他的什麼,還是說要做西餐還是中餐。目標不一樣,學習的東西也是不一樣的。
假如你覺得電影電視劇上的黑客特別厲害,彈指間黑了別人的網站。你想有這樣的技術,這屬於網路安全方面的,這個方向又分為操作系統方向、web網站服務安全方向、嵌入式安全方向(這么分只是我個人的理解,還能從其他方面區分)。這個時候你應該全面的了解計算機,包括但不限於計算機組成(各個配件是干什麼、配件的工作原理)、計算機網路(就是你怎麼能上網的這么一個過程)。這個時候你應該學習操作系統原理、計算機組成原理、計算機網路、C語言之類的。
2. 假如你看到某個網站很漂亮,你也想做個這樣的網站(頁面),你需要學習html、h5、和JavaScript相關的東西。當然了解了這些之後,就要接觸一些服務端的東西(就是給你提供網頁上展示內容的東西),服務端現在大部分是java、php和python寫的,也有的使用node.js之類的語言寫的。當然也有其他的各種各樣的編程語言。
3. 假如你覺得網路、阿里、騰訊的服務好厲害,那麼多人同時訪問伺服器居然能撐得住,你需要學習服務端的編程語言,比如java、python,學習過程中你會學到資料庫。然後學習框架(java的ssh(有人說這個框架過時了,但用的企業也不少,springboot。python的框架:flask、Django之類的))
4. 假如你覺得某個手機應用比較好,自己也想做一個,Android手機應用現在大部分是java寫的,先學java,然後學Android。蘋果手機應用現在大部分是objective-c(oc)來寫,還有一部分是swift語言寫的。,學習的過程中你會了解到更多的可以開發手機應用的語言以及各種各樣的框架(混合開發、vue、RN之類的),以及開發手機應用的各種姿勢。
5. 假如你看著周圍的人對計算機軟體特別了解,什麼軟體都會用、什麼軟體都會安裝、就算不會的也能很快上手,**這個就不是編程了**,多用用計算機,有了問題網上搜一下,日積月累你也能成為這樣的人。
6. 假如你覺得周圍有的人對計算機硬體很了解,什麼cpu超頻、性價比、整機組裝、顯卡評測之類的,這也是平常了解到的,**和編程無關**,多看看計算機相關的雜志,關注一下各大計算機配件的供應商官網以及論壇之類的都可以。
**最關鍵的還是入門,入了門就好說了,如果朋友有會編程的,可以讓他們幫幫你,確定自己想學什麼,然後請他們幫你入門,然後就是自己學了。
6. 這道java編程題咋寫呀
圖片太小了,學生信息我亂輸入的,你自己改成題目里的吧
import java.util.HashMap;
import java.util.Map;
public class ListMapDemo
{
//使用map集合存儲學生信息
private Map<String,String> map = new HashMap<String, String>();
public ListMapDemo()
{
map.put("100001","張三");
map.put("100002","張四");
map.put("100003","李毅");
map.put("100004","和阿里");
map.put("100005","卡回家");
map.put("100006","盡快哈");
}
/**
* 列印是否有某個學生
* @param name
*/
public void hasStudent(String name)
{
boolean hasName = false;
for(String key : map.keySet())
{
if (name.equals(map.get(key)))
{
hasName = true;
break;
}
}
if (hasName)
{
System.out.println("有姓名為" + name + "的同學");
}
else
{
System.out.println("沒有姓名為" + name + "的同學");
}
}
/**
* 獲取學生總數量
*/
public int getStudentNum()
{
System.out.println("學生總數量為 = " + map.size());
return map.size();
}
}
-----------------------------------------------------------
public class Test
{
public static void main(String[] args)
{
ListMapDemo listMapDemo = new ListMapDemo();
listMapDemo.hasStudent("張三");
listMapDemo.hasStudent("李四");
listMapDemo.getStudentNum();
}
}
7. 為什麼學習Java編程Java編程好嗎
為什麼學習Java編程?Java編程好嗎?Java是一種為多個平台生成軟體的編程語言。當程序員編寫Java應用程序時,編譯的代碼(稱為位元組碼)可在大多數操作系統(OS)上運行,包括Windows,Linux和MacOS。Java從C和C++編程語言中衍生出大部分語法。下面詳細的介紹一下Java編程
一、為什麼學習Java編程?Java編程好嗎?Java具備完善的生態圈
過去的十多年,Java基本每年都是全世界使用人數第一的語言。全世界數百萬的IT企業構建了龐大的Java生態圈,大量的軟體基於Java開發。Java也被譽為「計算機界的英語」。JAVA的應用范圍涉及所有行業、絕大多數IT企業,形成了龐大的生態圈。
Java核心思想:面向對象編程,繼承,高兼容(代碼移植性強),開源,避免重復造輪子(使用Mybatis,Spring,Redis等技術只需要將jar包依賴添加到項目中即可,jar包內就是技術核心代碼,而這些框架都是專業技術團隊開發出來的,這為大多數項目開發省去很多精力,拿來即用)。
現在這個時代不僅是行業的巨大機會,同時也是Java發展的時機。雖然Java的反對聲音一直都有,但是並沒有阻止Java前進的腳步,相反它會為Java的發展提供前進的方向,我們有理由相信,即使再過20年,Java也不會被打倒。
二、為什麼學習Java編程?Java編程好嗎?Java良好的就業與發展前景
根據IDC的統計數字,在所有軟體開發類人才的需求中,對JAVA工程師的需求達到全部需求量的60%~70%。同時,JAVA工程師的薪水相對較高。通常來說,具有3~5年開發經驗的工程師,擁有年薪10萬元是很正常的一個薪酬水平。
Java的持續完善在Java任務控制套件和Java高級管理控制台的雙重保障下,Java進入到了使用的新紀元,而同樣進入這個紀元的,還有雲計算和物聯網。
作為最常用的雲計算底層開發語言,Java的安全性、開放性、穩定性和跨平台性與雲計算高可靠、高拓展的優勢相得益彰。
所以就算真的有什麼不測風雲,Java也是一門非常好的鋪墊語言。因為編程思想,設計模是不會被淘汰的!Java的生態圈決定了它在未來10年,甚至20年都會是最熱門的語言之一。而且退一萬步講,就算Java瀕臨淘汰,你在精通Java的情況下,學習其他語言也是觸類旁通的。
在未來的幾年,Java工程師人才的需求還在不斷的加大,由於人才的緊缺,這一門職業相對於其它專業薪資待遇還是不錯的,JAVA工程師待遇是與你的工作經驗直接掛勾的,當你有了豐富的經驗以後,你在這個社會上就比較搶手了,而且企業所出的薪酬也是相當高的,到時只有你選擇他們了。
三、為什麼學習Java編程?Java編程好嗎?Java語言和其它開發語言比較
各路大神詬病Java這門語言,強類型,語法結構比較嚴謹,但是對於初學者來說,Java還是非常友好的,相對簡單學習周期不會太長,很多人學過Java之後,再學習其他語言感覺非常輕松。是一門非常好的鋪墊語言。
在TIOBE編程語言排行榜中,Java長期位居榜首,是2015年的年度編程語言。通過GoogleTrends,可以看到Java的搜索量遠高於緊隨其後的幾門語言。
Java通過JVM實現了「一次編寫,到處運行」的特性,由JVM屏蔽掉了不同平台的差異性,並創建了位元組碼語言來作為Java代碼的「匯編語言」,JVM讀取位元組碼文件、解析位元組碼文件來運行;
JVM提供了垃圾收集器,大部分情況下,程序員不需要自己擔心內存的分配和回收;
Java在企業級開發領域具備殺手級框架Spring全家桶,讓Java在企業服務領域幾無敵手;
Java在客戶端開發領域具備殺手級應用場景——Android開發;
Java開發的生態非常豐富和完整,有無數成熟可靠的開源軟體;
Java是一門面向對象的靜態類型語言,面向對象的特性有助於Java構建大型的、復雜的應用,靜態類型語言使得Java在運行時的速度遠勝於解釋性語言,同時使得Java應用在編譯期可以發現很多問題,是類型安全的;
JVM虛擬機:按照虛擬化裡面的概念,JVM虛擬機屬於宿主型虛擬機,作為一個虛擬機,最核心的模塊是:運行時內存管理、類載入、位元組碼系統、執行引擎、垃圾收集器等等;
JRE(Java運行時環境):只有JVM,對於普通的Java開發者來說難度太高了,因此Hotspot的開發者還為普通開發者提供了對應的JavaSEAPI和其他開發者需要的類庫,這些API、類庫和JVM共同構成了Java運行時環境。
Java語言:JVM之上不僅僅有Java語言長盛不衰,還培育出了豐富的語言生態,例如Scala、Groovy、Kotlin、等新生代的語言。
JDK:JVM、JRE,在加上輔助工具、Java語言,共同構成了JDK。
四、為什麼學習Java編程?Java編程好嗎?Java語言開發與應用場景
80%以上的高端企業級應用都使用JAVA平台(電信、銀行等)。JAVA是成熟的產品,已經有10年的歷史。Amazon、Google、eBay、淘寶、京東、阿里和其它的大型電子商務品牌都在使用Java來後台處理。這么多企業都青睞Java,主要原因是Java的可擴展性好,可以處理更多的客戶數據。
從Java語言的應用場景和生態看,分為如下幾點:
企業級開發(J2EE):SSM框架、SpringBoot、SpringCloud、JPA、緩存、批量處理、定時任務等等;
客戶端開發(J2ME):安卓開發
大數據開發:Spark、Hadoop、HBase、ElasticSearch等。
微服務是一個新興的軟體架構,就是把一個大型的單個應用程序和服務拆分為數十個的支持微服務。一個微服務的策略可以讓工作變得更為簡便,它可擴展單個組件而不是整個的應用程序堆棧,從而滿足服務等級協議。而Java技術具有卓越的通用性、高效性、平台移植性和安全性。
微服務與語言兩者間並沒有什麼必然的關系。微服務的好處就是可以帶來微服務的異構性,用所有語言都可以寫出合格的微服務。沒有最好的語言,只有最合適的使用場景。
在我看來,微服務最應該關注的不是開發,也不是運維,而是如何設計微服務,業務上的設計遠比代碼上的實現來得重要。此時領域驅動設計就顯得如此重要,先從領域模型入手,設計合理的服務,然後再來談微服務落地。
微服務的落地需要考慮很多問題,比如服務的實現、如何開發、如何測試、服務的運維、可運維和高可用。
進入微服務的落地環節之後,就要和語言有關了。比方說微服務該如何測試?微服務的服務提供方需要優雅地調用自己,而服務消費方要模擬提供方的反應。
完整的生態環境能幫助你快速地將微服務落地。
Java稱霸的領域廣泛,大型企業級應用,主要使用JAVAEE,比如大型企業管理系統,最典型的就是:
有關通信及網路的大型企業:移動、聯通、電信、網通主要的信息化都是Java;
有關金融行的大型企業,所有的銀行、證券公司,比如工商銀行、建設銀行;大型管理系統,如:供應鏈、客戶管理系統??;
電子政務,主要使用JAVAEE,相關的政府部門絕大多數的信息化系統是JAVA開發的;
游戲,很多手機游戲都是用Java開發的;
嵌入式設備及消費類電子產品,主要用現在很流行的Android,無線手持設備、通信終端、醫療設備、信息家電(如數字電視、機頂盒、電冰箱)、汽車電子設備等是比較熱門的Java應用領域。
Java無論是應用還是將來就業的薪資以及就業崗位的廣泛度來分析,Java都是不錯的選擇,這可能也是為什麼這么多人喜歡Java想要學習Java成為Java開發工程師的原因所在。
8. 用C++設計一個發工資程序
按照題目要求編寫的C++程序如下
(見圖,代碼麻煩你自己打一下)
9. 2018年阿里在線編程題(c++)
直接輸入123456即可.不要加分隔符,你自己粘貼到IDE裡面看吧,我這里不知道為什麼不能轉換為代碼格式回答。
#include <string>
#include <iostream>
#include <stdio.h>
int main()
{
using namespace std;
string sacrifice;
int a[6];
while(1){
getline(cin,sacrifice);
for(int i=0;i<6;i++){
a[i]=sacrifice[i]-48;
}
for(int i=0;i<5;i++)
for(int j=i+1;j<6;j++)
if(a[j-1]>a[j]){
int sac=a[j-1];
a[j-1]=a[j];
a[j]=sac;
}
if(a[0]>2||a[1]>3||a[2]>5||a[3]>5){
printf("N/A\n");
}
else if(a[2]*10+a[3]<60&&a[4]*10+a[5]<60){
string min;
min+=a[0]+48;min+=a[1]+48;min+=":";min+=a[2]+48;min+=a[3]+48;min+=":";min+=a[4]+48;min+=a[5]+48;
printf("%s",min.c_str());
for(int i=1;i<6;i++){
if(a[i]>a[0]&&a[i]<=2){
int sac=a[i];
a[i]=a[0];
a[0]=sac;
}
}
int jud=9;
if(a[0]==2)jud=3;
for(int i=2;i<6;i++){
if(a[i]>a[1]&&a[i]<=jud){
int sac=a[i];
a[i]=a[1];
a[1]=sac;
}
}
if(a[4]>5&&a[5]>5){
int sac=a[2],sac2=a[4];
a[2]=a[3];
a[4]=sac;
a[3]=a[5];
a[5]=sac2;
}
else if(a[5]>5){
int sac=a[2],sac2=a[3];
a[3]=a[5];
a[2]=a[4];
a[4]=sac2;
a[5]=sac;
}
else{
int sac=a[5];
a[5]=a[2];
a[2]=sac;
sac=a[3];
a[3]=a[4];
a[4]=sac;
}
string max;
max+=a[0]+48;max+=a[1]+48;max+=":";max+=a[2]+48;max+=a[3]+48;max+=":";max+=a[4]+48;max+=a[5]+48;
if(max!=min)printf(",%s\n",max.c_str());
else
printf("\n");
}
}
}
10. 為什麼阿里工程師代碼寫的好看看他的代碼規范就知道了
曾經與一位從阿里出來的Java工程師一起工作過一段時間,他的技術說不上非常厲害, 但是,他的代碼寫的的非常好,凡是他做的功能很少出現Bug 。我就很好奇,於是經常向他請教一些代碼設計的原則,然後他告訴了我阿里Java手冊。並且,他將這個手冊進行了修改,也成為了我司Java程序員的開發手冊。 這篇文章就讓我們看一看這個手冊中比較重要的原則。
【強制】 代碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結束。
反例:_name / __name / $name / name_ / name$ / name__
【強制】 類型與中括弧緊挨相連來表示數組。
正例:定義整形數組 int[] arrayDemo; 反例:在 main 參數中,使用 String args[]來定義。
【強制】 POJO 類中布爾類型變數都不要加 is 前綴,否則部分框架解析會引起序列化錯誤。
說明:表達是與否的值採用 is_xxx 的命名方式,所以,需要在 設置從 is_xxx 到 xxx 的映射關系。
反例:定義為基本數據類型 Boolean isDeleted 的屬性,它的方法也是 isDeleted(), RPC 框架在反向解 析的時候,「誤以為」對應的屬性名稱是 deleted,導致屬性獲取不到,進而拋出異常。
【推薦】 在常量與變數的命名時,表示類型的名詞放在詞尾,以提升辨識度。
【推薦】 介面類中的方法和屬性不要加任何修飾符號(public 也不要加),保持代碼的簡潔 性,並加上有效的 Javadoc 注釋。盡量不要在介面里定義變數,如果一定要定義變數,肯定 是與介面方法相關,並且是整個應用的基礎常量。
正例:介面方法簽名 void commit();
介面基礎常量 String COMPANY = "alibaba";
反例:介面方法定義 public abstract void f();
說明:JDK8 中介面允許有默認實現,那麼這個 default 方法,是對所有實現類都有價值的默認實現。
【參考】 枚舉類名帶上 Enum 後綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。
說明:枚舉其實就是特殊的類,域成員均為常量,且構造方法被默認強制是私有。
正例:枚舉名字為 ProcessStatusEnum 的成員名稱:SUCCESS / UNKNOWN_REASON。
【參考】 各層命名規約:
1) 獲取單個對象的方法用 get 做前綴。
2) 獲取多個對象的方法用 list 做前綴,復數形式結尾如:listObjects。 3) 獲取統計值的方法用 count 做前綴。
4) 插入的方法用 save/insert 做前綴。
5) 刪除的方法用 remove/delete 做前綴。
6) 修改的方法用 update 做前綴。
1) 數據對象:xxxDO,xxx 即為數據表名。
2) 數據傳輸對象:xxxDTO,xxx 為業務領域相關的名稱。
3) 展示對象:xxxVO,xxx 一般為網頁名稱。
4) POJO 是 DO/DTO/BO/VO 的統稱,禁止命名成 xxxPOJO。
【強制】 不允許任何魔法值(即未經預先定義的常量)直接出現在代碼中。
【強制】 避免通過一個類的對象引用訪問此類的靜態變數或靜態方法,無謂增加編譯器解析 成本,直接用類名來訪問即可。
【強制】 相同參數類型,相同業務含義,才可以使用Java的可變參數,避免使用Object。
說明:可變參數必須放置在參數列表的最後。(提倡同學們盡量不用可變參數編程)
【強制】 所有整型包裝類對象之間值的比較,全部使用equals方法比較。
說明:對於 Integer var = ? 在-128 至 127 范圍內的賦值,Integer 對象是在 IntegerCache.cache 產 生,會復用已有對象,這個區間內的 Integer 值可以直接使用==進行判斷,但是這個區間之外的所有數 據,都會在堆上產生,並不會復用已有對象,這是一個大坑,推薦使用 equals 方法進行判斷。
關於基本數據類型與包裝數據類型的使用標准如下:
說明: POJO 類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進行賦值 ,任何 NPE 問題,或 者入庫檢查,都由使用者來保證。
正例:資料庫的查詢結果可能是 null,因為自動拆箱,用基本數據類型接收有 NPE 風險。
反例: 比如顯示成交總額漲跌情況,即正負 x%,x 為基本數據類型,調用的 RPC 服務,調用不成功時, 返回的是默認值,頁面顯示為 0%,這是不合理的,應該顯示成中劃線 。所以包裝數據類型的 null 值,能 夠表示額外的信息,如:遠程調用失敗,異常退出。
【強制】 POJO 類必須寫 toString 方法。
使用 IDE 中的工具:source> generate toString 時,如果繼承了另一個 POJO 類,注意在前面加一下 super.toString。
說明: 在方法執行拋出異常時,可以直接調用 POJO 的 toString()方法列印其屬性值,便於排查問題。
【強制】 關於hashCode和equals的處理,遵循如下規則:
說明:String 已覆寫 hashCode 和 equals 方法,所以我們可以愉快地使用 String 對象作為 key 來使用。
【強制】 線程資源必須通過線程池提供,不允許在應用中自行顯式創建線程。
說明:線程池的好處是減少在創建和銷毀線程上所消耗的時間以及系統資源的開銷,解決資源不足的問 題。 如果不使用線程池,有可能造成系統創建大量同類線程而導致消耗完內存或者「過度切換」的問題。
【強制】 線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。
以上規范在設計代碼中,是比較重要的原則。如果編寫代碼的過程中,可以依照以上原則,那代碼的可讀性和可維護性將大大提升