1. 美团前端面试难吗
美团目前也是在大量的招人啊~~当时参加的是美团打车部门的面试(一年工作经验以上的),部门技术栈vue,后台就是node,一面通过,等了两个小时面试二面,然后通知我回去等消息,一般这样就是挂掉了,毫无疑问。美团是一次性全部面完的。所以去参加最好做好面试四个小时的打算。
先来聊聊一面吧~哈哈
一面
1.简单的自我介绍,与大体的了解我。。。
一面面试官非常不错,先问了下几个项目和用到的技术,会先对我懂的东西做一个大体的了解,比如webpack的单页面的多页面切换,webpack的按需加载,一些webpack的配置有哪些,问了有没有看vue源码,我说了一个vue的watch,大体问了问我框架方面的东西,发现我对框架并不是很熟练,安慰我说没有关系。
2.promise的原理
这个面试官最让人欣赏的就是不会去问你不了解的东西,一开问了我promise,发现我用的并不是很多,就很自然的说没事,换一种方法问你~~~好和蔼啊~
然后就让我用原生js写一个回调函数,其实就是问promise的原理了,js写一个。
3.this指向
这个是面试官手写了一道变态长以及绕的this指向题,可以自行网络js this指向面试题,看几道没有啥问题,需要关注的是其中也考了,argument,和apply(null)。以后想起来再写吧
4.bind与函数柯里化
也就是写个bind,这个红皮书高级函数(22章)有,
可以看下。不过还是得先理解bind的用法,返回一个函数,以及可以传递的参数。参数这里涉及到了函数柯里化。都是手写代码,而且最好写的整洁,因为我有些一笔带过,面试官都让我写完整,明确说要看我写代码水平
5.==, isNaN, typeof
问这个之前先问了我有几种数据类型(七种,下图再加symbol),这里隐形的看你知不知道es6,symbol这个新出的类型。说出了symbol自然会问你这个类型有什么用。
然后就写了好多个typeof,isNaN,==的问输出,这个就是基础题
6.知道什么http请求头?
这个可以说的很多,说了几个,又主动说了下有关跨域请求头,之前项目用的cors,于是和他聊了一会,其实面试就是主动表现自己,把自己知道的都说出来,不然几个请求头说细不细,要问细了能把人问蒙了,最好把话题引到自己知道的地方。
7.问了css
问了css盒子并画出来,清除浮动与bfc,两列布局。
8.说了一大堆其实就是想考我防抖
面试完这个问我想问的问题,我直接问还有二面么?回答有的,又介绍了一会美团打车,说是后台是node,看来要求是前端也要有后台的知识喽。
二面
二面的是我的学长,可是我被问惨了。。。。问的显然比一面深入很多,都问了java
1.自我介绍,问项目
针对项目问了不少,当时有一个支付行为的项目,于是问了很多安全方面的问题,蒙蒙的,完全不知道。第一个就很失败了。然后问了其他的项目,问了websocket。
2.node的EventEmitter用js实现出来
写出来了,但是可以看出来代码写的不规范,学长面试官表示看起来很乱。不过大约算是可以的,指出了几个问题,让我进行修改。(之后完善)
3.虚拟dom
其实vue中就有jsx,react的特点之一有jsx,虚拟dom和代码优化有点关系。
先说下正常对dom的操作,在浏览器中分为渲染引擎和js引擎,现在浏览器内核一般都是渲染引擎(生成渲染树),因为js引擎越来越独立了(所谓的v8引擎?)
然而你在js中获取dom元素的时候你必须要通过渲染引擎,这样两个线程之间的数据交换自然会很慢。所以在前端优化中总是要考虑减少dom操作这一项。包括获取dom元素变量储存起来。
jsx是把dom元素变成了储存在内存中的数据结构。js很快,操作dom也很快。不过也存在缺点,目前的理解就这么点了。
4.路由的实现原理
饿,不知道。。(待会看!)
5.node文件流,java的映射机制(记不太清楚)?
饿。。
6.数组方法map和recer区别?
饿
7.进程与线程的区别
终于有个我会的了,这个显然想问你js的运行机制。先介绍了下进程与线程。
一个浏览器是一个进程,虽然js是单线程的,但是浏览器是多线程的,v8引擎也是多线程的,比如有渲染线程,有处理请求的线程。然后说说任务队列,eventloop。没有理解很深也不敢往下说。
事件循环可以看下这个,链接
8.树遍历
先序,中序,后序。我只知道这么多了,显然想让我写一个的,可是不会。也显然面试官内心已经把我pass掉了,没多问。
9.问了个算法
KMP??反正我不知道。
2. 像美团外卖这样的APP用一种开发语言,能开发得出来吗
像美团外卖这样的APP用一种开发语言,能开发得出来吗?答案是不能。
美团发展到现在可以说已经是一个【巨无霸】了,里面集成了很多很多功能,除了核心的外卖,还有 旅游 、 娱乐 、购物、出行,金融等等业务线,那么这么多复杂的业务根本不可能用同一种开发语言实现。
那么美团都用到哪些开发语言和技术了呢?下面就根据我的理解详细说一下。
前端是把产品的核心服务交给用户的呈现者,它的表述方式、展示形式以及交互逻辑都跟用户息息相关,都影响着用户使用产品的体验,也就是说直接影响产品的用户留存。
前端开发主要分为三大类型:Andriod、IOS和PC(H5) ,android开发语言是Kotlin和Java,IOS开发语言是Object-c和Swift,PC(H5)开发语言就比较杂了,有JS、CSS、HTML,还有很多第三方的前端框架,比如Angular.js、vue.js、Bootstrap、JQuery等等。
关于后端的功能,这一点可以说是众说纷纭,主要需要考虑的是如何实现功能、数据的交互流程和存取、平台的稳定性与性能等。
那么后端都用到哪些开发语言和技术呢?
根据后端技术选型的标准,后端可选的开发语言和技术是非常多的。
比如Java体系的话,可以选用SpringMVC、Spring cloud、Hibernate,Mybatis、Mysql、Redis、Memcache、zookeeper、Kafka......;
比如python体系的话,可以选用Django、Flask、Tarnado、Web2py等,中间件都是通用的,Redis,MQ、MySQL、Kafka等都可以用在python体系中;
当然还有PHP、C、Perl等开发语言。
综上所述,美团这个巨无霸公司,随着业务线的扩展用到的技术肯定会越来越多,而且越来越复杂,技术快速变革的时代,适者生存的竞争性也会越来越激烈。
俗话说:罗马不是一日建成的,任何事都不可能一蹴而就,包含技术。在以后的发展中美团也会逐步更新自己的技术和开发语言的。
至少三种语言。后端一种语言(比如Java丶Go丶Python丶PHP等),后端语言及生态比较成熟。下面重点聊前端App开发。
前台两种语言(Android和iOS是不同的开发环境。比如Android用Java或者Kotlin,iOS采用Object C++或Swift),称之为Native开发。
当然创业公司可以用一种前端语言写App前端,这样就不需要Android和苹果分两种语言写,写一次代码可以编译成Android和iOS的App,现在通行的方案有Vue之类的DOM渲染模式,以及ReactNative方案(RN)。性能上RN优于DOM渲染但低于用Native开发的App。所以美团这种公司,一定是Native方式写App,但RN是初创项目不错的选择。
与RN竞争的还有一种新贵flutter,是google推出来的,但设计原理与RN不同,性能方面优于RN,只是目前生态不够健全,国内有闲鱼app是采用此技术。未来可能会占一席之地。
最后,其实App开发已经是强努之末,我觉得主流应该是朝PWA和小程序方向发展。
你好,开发譬如美团这种APP,用一种语言是实现不了的,一个APP有安卓和苹果两个操作系统,开发能在安卓iOS端应用的APP主流的开发语言和技术是很多的,如后台有JAVA、C++、PHP、Python等多种开发语言,前端有kotlin、HTML、css、jquery、ajax、bootstrap、angular.js、react、vue.js、node.js、swift、object-c等多种语言和框架。
一个APP的开发是需要前端技术和后台技术共同配合完成,这样的APP不论是功能还是性能都给用户很好的体验,单一开发语言毕竟技术支持有限,所以即使能开发出来,APP的用户体验也是不理想的。
一般APP有这几种开发组合模式:1、原生安卓iOS开发,前端:JAVA、kotlin、swift、object-c后台:JAVA、PHP、C++等后台技术,这种模式开发周期长,成本高,性能好;2、混合APP开发即hybrid app,前端以网页技术为主,穿插原生开发功能,兼具原生APP和web app的优点,如淘宝、微信等应用都是走的这个技术;3、web app,前端纯网页技术,后台为主流开发语言,这种模式开发速度快,成本低,界面体验可能弱一些。
可见开发一款APP大多数都是多种语言配合完成,谢谢阅读。
看完之前的评论,依然好奇为什么一个语言不能完全胜任。
前端跨平台的方案有react native,cordova,flutter等,如果需要兼容开发小程序,h5页面,可以采用taro来开发,一套代码,所有平台通吃。
后端的方案有服务端运行时nodejs,大数据背景下运用而生的数据库mobgodb,缓存解决方案redis,搜索工具elasticsearch,负载均衡ngix,基本上是需要什么就有什么
所以总结下来,一句话,一种语言可以实现类似美团这样的app和小程序。为什么美团使用的语言那么多,一大原因估计是美团app开发的早,当时前端技术不成熟,工具没现在这么多。
使用混合开发与C++ 进行跨平台开发,有好有坏。
C++ 进行跨平台开发
编写一次,随处运行。早在 2013 年,Dropbox 就采用上述策略进行移动开发,这背后的想法很简单:用 C++ 编写一次代码,而不是用 Java 和 Objective-C 编写两次。那时,整个移动工程团队相对还比较小,但需要支持快速增长的移动路线图。因此,公司希望找到一种方法,使这个小团队可以快速交付大量 Android 和 iOS 代码。
如今,Dropbox 完全放弃了这个策略,转而使用各个平台的原生语言(主要是 Swift 和 Kotlin ,这两种语言在刚开始制定移动策略时还不存在)。
Hybrid App混合开发
Hybrid App主要以JS+Native两者相互调用为主,从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发。Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。
目前已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、支付宝等知名移动应用,都是采用Hybrid App开发模式。
移动应用开发的方式,目前主要有三种:
几种模似都可以开发出应用,小应用无所谓,但是大流量应用,对图形要求高的如 游戏 等原生开发的效果还是最好
支付宝打开很慢,就是因为采用混合开发,使用人多了不如原生开发
不行的哦。任何你看到的应用和网页,都需要多个语言开发的,大的分比如前端和后端,用的语言都是不一样的
3. 美团软件是怎么开发出来的。
美团软件就相当于一家商店,手机上的商品分类显示和商品的展示是用安卓android开发或者ios这些前台ui设计(其实就是超市里面的分类存放)这只是框架来显示。就是我们看到的手机上的排版后台用一些编程语言java、c语言c#等编写各种类及之间的各种关系(一个数据库中的各种关系,增删改查)————其实就是把商品创造出来,按各类分好,再把分好的东西摆放到用前台ui设计出的框架中。其实美团等软件的开发和我们实际生活息息相关,只是用计算机的思想把他解决。
4. 美团RN是什么意思
美团RN是指美团点评餐饮外卖平台使用的React Native技术。React Native是Facebook公司开发的一种跨平台框架,可以使用JavaScript语言编写原生应用程序。美团点评将React Native应用于它的移动应用程序开发中,从而创建了美团RN。
美团RN的优势在于它能够快速构建跨平台原生应用程序。使用React Native,开发人员可以更快地开发移动应用程序,同时还可以在Android和iOS平台之间分享最多的应用程序代码。这样,美团点评可以为其客户提供快速,高效和一致的用户体验。
美团RN目前是美团点评移动开发的重要技术之一。美团点评的开发人员通过使用该技术来为其iOS和Android平台开发各种应用程序。美团RN的引入帮助美团点评更快地推出新的功能并提高了应用程序的性能,从而使其能够保持在激烈的餐饮外卖市场中的领先地位。