阿里巴巴的外贸面试笔试题、笔试题去哪里找?

阿里巴巴_笔试面试题目及经验分享_牛客网
笔试难度:
面试难度:
工作感受:
薪资福利:
(1715人评价)
关于阿里巴巴短评
阿里巴巴经验分享
阿里巴巴招聘信息
发表于今天 15:19:35
关于阿里巴巴的问题(共1097条)
阿里巴巴集团经营多元化的互联网业务,致力为全球所有人创造便捷的交易渠道。自成立以来,阿里巴巴集团建立了领先的消费者电子商务、网上支付、B2B网上交易市场及云计算业务,近几年更积极开拓无线应用、手机操作系统和互联网电视等领域。
阿里巴巴相关试卷
阿里巴巴相关试题
浏览量13233
浏览量22062
浏览量13733
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
京ICP备号-4
扫一扫,把题目装进口袋记录一次壮烈牺牲的阿里巴巴面试!网友:这个面试题不太一样!记录一次壮烈牺牲的阿里巴巴面试!网友:这个面试题不太一样!不诉离伤百家号今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,金服后端大佬来了电话,要进行一轮的技术。我一脸黑人问号???现在的面试都流行突袭吗?于是我的第一次面试之旅,就此壮烈的展开。自我介绍首先呢,大佬让我用两分钟自我介绍。我本以为自己能滔滔不绝,将对方视作相亲对象般全方位介绍自己。结果不到半分钟,我就介绍完了==。五秒钟的沉默后,大佬嗯了一声。感觉自己的脸上堆满了尴尬而不失礼貌的微笑。最近的项目经历这时大佬问我最近从事了什么项目,研究生阶段都进行了什么样的工作。那必须吹一吹!从JAVA的起源到Spring的发展再到jenkin的使用顺便提一嘴dva+antd,结果半分钟一到,又说不下去了==大佬很有耐心的听我说了一堆语无伦次的话,开始进入正题。Spring大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?我:(因为大家都说好啊)首先呢,spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。大佬:(我就知道你会说IOC啦)那你解释一下IOC吧我:IOC就是依赖控制转化,利用JAVA的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?我:啊……..因为…….方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且spring的IOC是单例模式呢。大佬:默认的是实现是单例模式吗?我:对的。这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不重新编译代码,因为它的对象都是动态生成的。数据库大佬:你使用过哪些数据库呀?我:mysql还有sqlight。(被遗忘的mongodb在角落里无声哭泣)大佬:那你使用的ORM框架除了hibernate还有哪些,比如IBatis?我:我用过MyBatis大佬:哦,那你能讲一下你对两个框架使用后的感受吗?我:当时使用Mybaits的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而Mybatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗?我:(忘得一干二净)emmm不好意思我记不太清楚了。大佬:那你还记得数据库的加锁吗?比如乐观锁,悲观锁?我:(求您别问了T T)大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢?我:可以纵向分割与横向分割。大佬:那你觉得这里应该纵向还是横向呢?我:纵向(载入史册的嘴瓢)大佬:(很有耐心)可是这样我的数据库还是放不下啊我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储大佬:那你觉得我们怎样分割比较合适呢?我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级?大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题我:(谢谢您的台阶啊!)Linux大佬:你们服务器用的是什么操作系统啊?我:(呀,送命题)我们用的是阿里云上的centos系统大佬:那你对linux熟练吗?我:不是很熟悉,仅仅是入门,能够敲一点指令。大佬:好,那你知道库函数和内核调用吗?我:内核调用是指进入内核态然后执行指令然后再回到用户态吗?大佬:对我:我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己)大佬:那你知道如何查看进程吗?我:啊…记不得了,我一般都查一下指令(于是大佬果断放弃了其它linux问题)。JVM大佬:你了解JAVA虚拟机吗?能解释一下底层的模块吗?我:(如果你通知我明天面试,我就了解了>线程大佬:你知道什么是线程安全吗?我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。大佬:那你知道JAVA有什么方法来实现线程安全吗?我:(前几天还翻译了博客,但是一问起来忘得比啥都快)首先是synchronized修饰词,然后JAVA还自己实现了一些封装好的类比如LatchDown,Atomic系列(????????后来一查是CountDownLatch!还有大明湖畔的final关键字呢?还有小明湖畔的Lock呢?还有那些实现线程的collections比如ConcurrentHashMap呢?)大佬果然开启了下一个问题。分布式大佬:你有写过分布式的业务吗?我:我写过一个基于HDFS分布式存储的KVStore,上层使用Hadoop的API实现。大佬:那个是分布式存储,我想了解一下分布式业务?我:(赶紧纠正)那dubbo算吗?(于是介绍了一下自己了解的dubbo)大佬:ok。那你觉得分布式的话会遇到什么问题呢?我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题大佬:那你能具体解释一下CAP代表什么吗?我:(紧张到一片空白)Consistency?Atomic?P…Persistency???大佬:。。。。。。CAP:是指Consistency一致性,Availability可用性,Partition Tolerance分区容忍性设计模式大佬:你了解过设计模式吗?我:了解了解大佬:那你了解过哪些设计模式呢?我:blablabla大佬:那你解释一下指令模式吧我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。总结最后当然和大佬话一话家常,进行最后的挣扎。总结来说,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容:JAVA语言,尤其是线程JVM原理数据库(事务,加锁,ORM)LinuxSpring(重点!)分布式设计模式可以说是涉及范围非常广了。不过其实要想成为一名优秀的后端开发,是需要这些知识面的,只能说自己还是太菜了。要继续深入学习!写在最后大咖的话:“最近有很多想学习编程的朋友问我有没有什么好的资料,因为最近几年我都在认真搜集有价值的编程资料。下图就是:以上价值3万元的资料,都是我这几年辛苦搜集的!绝对比群里那些漫天飞的资料强多了。今天决定免费分享,用来帮助想学习编程的朋友。”获取方式:公众号:“鸡蛋君说前端”,关注后即可免费领取上图价值3万元的全套视频资料!觉得不错请请点赞!欢迎留言分享!本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。不诉离伤百家号最近更新:简介:湮没一朝风涟。花若怜,落在谁的指尖作者最新文章相关文章学生党如何拿到阿里技术offer: 《阿里巴巴常考面试题及汇总答案(Java方向)上篇》
学生党如何拿到阿里技术offer: 《阿里巴巴常考面试题及汇总答案(Java方向)上篇》
今天为大家分享不是前辈们的面试经历而是面试题目,这篇题目可谓良心之作,只不过原文链接已经失效,在这里还是谢谢原作者。
之前和大家分享了几位学长学姐们在阿里面试的经验,他们其中有成功的,也有留下遗憾的。但是总之,我认为作为技术人员,首先打铁需要自身硬,在学校里不光要学精学透基础的专业知识,还要有过硬的编程能力,当然我们所谓的计算机软件的科班出身更不能将自己定位为所谓的程序而应该是软件攻城狮…这样我们要对自己有一个比较高的要求,记得有一个计算机大牛曾说过“Talk is cheap,show me the code!”,的确与其空谈,不如实干,多看书,多思考,多动手编程,多参与项目实践。
好了,今天就不多少了,直接上干货了。
今天为大家分享的是《阿里巴巴常考面试题及汇总答案(上篇)》
原文如下:
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。
2、String不可变是因为在JDK中String类被声明为一个final类。
3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。
ps:线程安全会带来额外的系统开销,所以StringBuilder的效率比StringBuffer高。如果对系统中的线程是否安全很掌握,可用StringBuffer,在线程不安全处加上关键字Synchronize。
二、Vector,ArrayList, LinkedList的区别是什么?
1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。
2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。
3、Vector线程同步,ArrayList、LinkedList线程不同步。
4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。
5、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间。
详见:链接
三、HashTable, HashMap,TreeMap区别?
1、HashTable线程同步,HashMap非线程同步。
2、HashTable不允许&键,值&有空值,HashMap允许&键,值&有空值。
3、HashTable使用Enumeration,HashMap使用Iterator。
4、HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。
5、TreeMap能够把它保存的记录根据键排序,默认是按升序排序。
小编注:为什么没有第四题不要问我...学姐没写
五、Tomcat,Apache,JBoss的区别?
1、Apache是Http服务器,Tomcat是web服务器,JBoss是应用服务器。
2、Apache解析静态的html文件;Tomcat可解析jsp动态页面、也可充当servlet容器。
六、GET,POST区别?
基础知识:Http的请求格式如下。
&request line&
主要包含三个信息:1、请求的类型(GET或POST),2、要访问的资源(如\res\img\a.jif),3、Http版本(http/1.1)
用来说明服务器要使用的附加信息
&blank line&
这是Http的规定,必须空一行
[&request-body&]
请求的内容数据
1、Get是从服务器端获取数据,Post则是向服务器端发送数据。
2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被编码过;Post数据则是放在Html header内提交。
3、对于Get方式,服务器端用Request.QueryString获取变量的值;对用Post方式,服务器端用Request.Form获取提交的数据值。
4、Get方式提交的数据最多1024字节,而Post则没有限制。
5、Get方式提交的参数及参数值会在地址栏显示,不安全,而Post不会,比较安全。
七、Session, Cookie区别
1、Session由应用服务器维护的一个服务器端的存储空间;Cookie是客户端的存储空间,由浏览器维护。
2、用户可以通过浏览器设置决定是否保存Cookie,而不能决定是否保存Session,因为Session是由服务器端维护的。
3、Session中保存的是对象,Cookie中保存的是字符串。
4、Session和Cookie不能跨窗口使用,每打开一个浏览器系统会赋予一个SessionID,此时的SessionID不同,若要完成跨浏览器访问数据,可以使用 Application。
5、Session、Cookie都有失效时间,过期后会自动删除,减少系统开销。
八、Servlet的生命周期
大致分为4部:Servlet类加载--&实例化--&服务--&销毁
下图是Tomcat中Servlet时序图。
1、Web Client向Servlet容器(Tomcat)发出Http请求。
2、Servlet容器接收Client端的请求。
3、Servlet容器创建一个HttpRequest对象,将Client的请求信息封装到这个对象中。
4、Servlet创建一个HttpResponse对象。
5、Servlet调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象作为参数传递给HttpServlet对象中。
6、HttpServlet调用HttpRequest对象的方法,获取Http请求,并进行相应处理。
7、处理完成HttpServlet调用HttpResponse对象的方法,返回响应数据。
8、Servlet容器把HttpServlet的响应结果传回客户端。
其中的3个方法说明了Servlet的生命周期:
1、init():负责初始化Servlet对象。
2、service():负责响应客户端请求。
3、destroy():当Servlet对象推出时,负责释放占用资源。
九、HTTP 报文包含内容
主要包含四部分:
1、request line
2、header line
3、blank line
4、request body
十、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入
1、PreparedStatement支持动态设置参数,Statement不支持。
2、PreparedStatement可避免如类似 单引号 的编码麻烦,Statement不可以。
3、PreparedStatement支持预编译,Statement不支持。
4、在sql语句出错时PreparedStatement不易检查,而Statement则更便于查错。
5、PreparedStatement可防止Sql助于,更加安全,而Statement不行。
什么是SQL注入: 通过sql语句的拼接达到无参数查询数据库数据目的的方法。
如将要执行的sql语句为 select * from table where name = "+appName+",利用appName参数值的输入,来生成恶意的sql语句,如将['or'1'='1'] 传入可在数据库中执行。
因此可以采用PrepareStatement来避免Sql注入,在服务器端接收参数数据后,进行验证,此时PrepareStatement会自动检测,而Statement不行,需要手工检测。
十一、sendRedirect, foward区别
1、foward是服务器端控制页面转向,在客户端的浏览器地址中不会显示转向后的地址;sendRedirect则是完全的跳转,浏览器中会显示跳转的地址并重新发送请求链接。
原理:forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后再将这些内容返回给浏览器,浏览器根本不知道服务器发送的这些内容是从哪来的,所以地址栏还是原来的地址。
redirect是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求的那个地址,浏览器会用刚才的所有参数重新发送新的请求。
十二、关于JAVA内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。
由于JAVA中new出来的对象都是放在堆中,所以如果要实例化100次,将在堆中产生100个对象,一般对象与其中的属性、方法都属于一个整体,但如果
属性和方法是静态的,就是用static关键字声明的,那么属于类的属性和方法永远只在内存中存在一份。
十三、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的。
Hibernate是一个开发的对象关系映射框架(ORM)。它对JDBC进行了非常对象封装,Hibernate允许程序员采用面向对象的方式来操作关系数据库。
Hibernate的优点:
1、程序更加面向对象
2、提高了生产率
3、方便移植
4、无入侵性。
1、效率比JDBC略差
2、不适合批量操作
3、只能配置一种关联关系
Hibernate有四种查询方式:
1、get、load方法,根据id号查询对象。
2、Hibernate query language
3、标准查询语言
4、通过sql查询
Hibernage工作原理:
1、配置hibernate对象关系映射文件、启动服务器
2、服务器通过实例化Configuration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表以及表之间的映射关系。
3、通过实例化的Configuration对象建立SeesionFactory实例,通过SessionFactory实例创建Session对象。
4、通过Seesion对象完成数据库的增删改查操作。
Hibernate中的状态转移
临时状态(transient)
1、不处于session缓存中
2、数据库中没有对象记录
java是如何进入临时状态的:1、通过new语句创建一个对象时。2、刚调用session的delete方法时,从seesion缓存中删除一个对象时。
持久化状态(persisted)
1、处于session缓存中
2、持久化对象数据库中没有对象记录
3、seesion在特定的时刻会保存两者同步
java如何进入持久化状态:1、seesion的save()方法。2、seesion的load().get()方法返回的对象。3、seesion的find()方法返回的list集合中存放的对象。4、Session的update().save()方法。
流离状态(detached)
1、不再位于session缓存中
2、游离对象由持久化状态转变而来,数据库中还没有相应记录。
java如何进入流离状态:1、Session的close()。Session的evict()方法,从缓存中删除一个对象。
具体如下图所示:
Hibernate中的缓存主要有Session缓存(一级缓存)和SessionFactory缓存(二级缓存,一般由第三方提供)。
十四、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化
反射机制的定义:
是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。
反射的作用:
1、动态地创建类的实例,将类绑定到现有的对象中,或从现有的对象中获取类型。
2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类
十五、谈谈Hibernate与Ibatis的区别,哪个性能会更高一些
1、Hibernate偏向于对象的操作达到数据库相关操作的目的;而ibatis更偏向于sql语句的优化。
2、Hibernate的使用的查询语句是自己的hql,而ibatis则是标准的sql语句。
3、Hibernate相对复杂,不易学习;ibatis类似sql语句,简单易学。
性能方面:
1、如果系统数据处理量巨大,性能要求极为苛刻时,往往需要人工编写高性能的sql语句或存错过程,此时ibatis具有更好的可控性,因此性能优于Hibernate。
2、同样的需求下,由于hibernate可以自动生成hql语句,而ibatis需要手动写sql语句,此时采用Hibernate的效率高于ibatis。详见:
十六、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理
Spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,其次它提升了系统性能,因为通过依赖倒置机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀的性能使得Spring受到许多J2EE公司的青睐,如阿里里中使用最多的也是Spring相关技术。
Spring的优点:
1、降低了组件之间的耦合性,实现了软件各层之间的解耦。
2、可以使用容易提供的众多服务,如事务管理,消息服务,日志记录等。
3、容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
Spring中AOP技术是设计模式中的动态代理模式。只需实现jdk提供的动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务。面向切面编程中还要理解切入点、切面、通知、织入等概念。
Spring中IOC则利用了Java强大的反射机制来实现。所谓依赖注入即组件之间的依赖关系由容器在运行期决定。其中依赖注入的方法有两种,通过构造函数注入,通过set方法进行注入。
十七、线程同步,并发操作怎么控制
Java中可在方法名前加关键字syschronized来处理当有多个线程同时访问共享资源时候的问题。syschronized相当于一把锁,当有申请者申请该
资源时,如果该资源没有被占用,那么将资源交付给这个申请者使用,在此期间,其他申请者只能申请而不能使用该资源,当该资源被使用完成后将释放该资源上的锁,其他申请者可申请使用。
并发控制主要是为了多线程操作时带来的资源读写问题。如果不加以空间可能会出现死锁,读脏数据、不可重复读、丢失更新等异常。
并发操作可以通过加锁的方式进行控制,锁又可分为乐观锁和悲观锁。
悲观锁并发模式假定系统中存在足够多的数据修改操作,以致于任何确定的读操作都可能会受到由个别的用户所制造的数据修改的影响。也就是说悲观锁假定冲突总会发生,通过独占正在被读取的数据来避免冲突。但是独占数据会导致其他进程无法修改该数据,进而产生阻塞,读数据和写数据会相互阻塞。
乐观锁假定系统的数据修改只会产生非常少的冲突,也就是说任何进程都不大可能修改别的进程正在访问的数据。乐观并发模式下,读数据和写数据之间不会发生冲突,只有写数据与写数据之间会发生冲突。即读数据不会产生阻塞,只有写数据才会产生阻塞。
十八、描述struts的工作流程
1、在web应用启动时,加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,将它们存放到各个配置对象中。
2、当ActionServlet接收到一个客户请求时,首先检索和用户请求相匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息。
3、如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
4、根据配置信息决定是否需要验证表单,如果需要,就调用ActionForm的validate()方法,如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
5、ActionServlet根据ActionMapping实例包含的映射信息决定请求转发给哪个Action,如果相应的Action实例不存在,就先创建一个实例,然后调用Action的execute()方法。
6、Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
7、ActionForward对象指向的JSP组件生成动态网页,返回给客户。
天哪噜,Java方向的面试题还有很多呢。不过放在同一篇里大家容易看累了吧,好了,欲知后事,请大家看《阿里巴巴常考面试题及汇总答案(Java方向)下篇》。
阿里云技术专场招聘会-Java已经启动,特邀数位Java大牛担任面试官,两个工作日内高效回复。欢迎感兴趣的同学们来报名!
本系列文章:
用云栖社区APP,舒服~
【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下?&&
感觉有些地方写的有问题Get是从服务器端获取数据,Post则是向服务器端发送数据。 因此可以采用PrepareStatement来避免Sql注入,在服务器端接收参数数据后,进行验证,此时PrepareStatement会自动检测,而Statement不行,需要手工检测。
阿里云头条
关于事务的隔离级别,建议看下 http://mousycoder.com//explain-transaction-in-simple-language-3/
luckysevenfpk、阿里云头条
看了一下,基本都学过,自己说不出来,也体会不到那么深,还是用的太少
云数据库HybridDB(ApsaraDB HybridDB)是一种在线MPP大规模并行处理...
基于深度学习技术及阿里巴巴多年的海量数据支撑, 提供多样化的内容识别服务,能有效帮助用户降低...
消息队列(Message Queue,简称MQ)是阿里云商用的专业消息中间件,是企业级互联网...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...(jiaranran)
第三方登录:

我要回帖

更多关于 软件测试面试笔试题 的文章

 

随机推荐