阿里编程题
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的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
以上规范在设计代码中,是比较重要的原则。如果编写代码的过程中,可以依照以上原则,那代码的可读性和可维护性将大大提升