杭州美图JAVA面试(美图美妆app组)

杭州美图JAVA面试(美图美妆app组)

办公环境地毯,但是看到工位也是没有卡位,总体拥挤。

技术总监面:30min

1.       Restful风格有哪些,有什么优点?http://www.cnblogs.com/chinajava/p/5871305.html

1)       分类HTTP:

RESTful架构风格规定,数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源POST用来新建资源(也可以用于更新资源),PUT用来更新资源DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。

2)       无状态:

所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。

3)       客户端与服务实现除耦合:

RESTful风格的服务,由于可以直接以json或xml为载体承载数据,以HTTP方法为统一接口完成数据操作,客户端的开发不依赖于服务实现的技术,移动终端也可以轻松使用服务。

2.       Get传递多个参数,其中有几个不传可以么?

required=flase 表示可以不传输参数

@RequestMapping(value="get1",method=RequestMethod.GET)

      public voidget1(@RequestParam(value="p1",required=flase)){

           map.addAttribute("p1",p1);//往页面传递 }

 

3.       Post传递jason例如data={num:10,name:tom},controller接受的时候怎么转换为object的

  不会

4.       Jdk1.8的优点有哪些新功能?参考http://www.jb51.net/article/48304.htm

增加接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:

interface Formula{

    double calculate(int a);

    default double sqrt(int a) {

        return Math.sqrt(a);

    }}

 

Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法默认方法sqrt将在子类上可以直接使用

Formula formula =new Formula() {

    @Override

    public double calculate(int a) {

        return sqrt(a * 100);

    }

};

formula.calculate(100);     // 100.0

formula.sqrt(16);//4

Date API

提供了个全新的Clock类提供了访问当前日期时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数。某一个特定的时间点也可以使用Instant类来表示,Instant类也可以用来创建老的java.util.Date对象。

Clock clock =Clock.systemDefaultZone();

long millis =clock.millis();

Instant instant =clock.instant();

Date legacyDate = Date.from(instant);   // legacyjava.util.Date

5.       列举radis那些接口,list的使用lpop lput,有哪些好处?

参考http://www.runoob.com/redis/redis-lists.html

lpop 、rpop:分别为删除头部和尾部

//连接本地的 Redis 服务

        Jedis jedis = new Jedis("localhost");

        System.out.println("连接成功");

        //存储数据到列表中

        jedis.lpush("site-list","Runoob");

        jedis.lpush("site-list","Google");

        jedis.lpush("site-list","Taobao");

        // 获取存储的数据并输出

        List list =jedis.lrange("site-list", 0 ,2);

        for(int i=0; i

            System.out.println("列表项为: "+list.get(i));

        }

}

列表项为: Taobao列表项为: Google列表项为: Runoob

lrang(“list”,0,10)区间的值  

头                            尾

Runoob

Google

taobao

 

redis.expire(key,expiration);设置过期时间

6.       Hashmap扩容之后原来数据怎么排放?

从新计算hashcode mod 算出buket

7.       存储过程应用场景

定期跑的一些数据例如统计log汇总数据。

优点

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度

  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。存储过程,只需要连接一次数据库就可以了。

  3.存储过程可以重复使用,可减少数据库开发人员的工作量。

  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

缺点 

1.      SQL本身是一种结构化查询语言,但不是面向对象的,本质上还是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,如果如果把业务逻辑全放在存储过程里面,违背了这一原则。

2.调试不方便

   3. 没办法应用缓存。虽然有全局临时表(  create temporary tabl)之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。

   4、不支持集群,数据库服务器无法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。

 

8.       Dubbo框架的运行机制 心跳测试


消费者订阅服务,提供者注册服务,Zookeeper是dubbo的注册中心

消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者

消费者要持续心跳测试。

9.       消费者invoke服务的时候通过什么传输

TCP/IP

10.    注册中心推动给消费者的是列表,消费者如何总列表总获取对应ip值

11.    知道的传输协议?Tcp/ip在哪一层,http在哪一层,udp在那一层?

http ftp 是应用层,TCPUDP传输层,IP网络层

12.    Springmvc的好处的流程

Request请求找到controller里对应代码运行,@ResponseBody返回json,return redirect:index.html 页面跳转。

优点:

1、用@RequestParam获取HttpServletRequest里的参数值相当方便,spring可以进行自动的类型转换

2、对于Restful的支持,结合@RequestMapping的UriTemplate和method以及@PathVariable,非常方便地实现了restful的url

3、对于Ajax的支持,@RespsonseBody提供了方便的机制

4、灵活丰富的@Controller的函数返回类型

5、可以方便地给@Controller函数注入各种资源

 

13.    很多请求,中间需要经过统一处理,例如加日志记录,权限检测怎么实现? 拦截器参照http://blog.csdn.net/tonytfjing/article/details/39207551

SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。  所以我们现在web.xml中加入以下配置:

preHandle在业务处理器处理请求之前被调用,postHandle在业务处理器处理请求执行完成后,生成视图之前执行afterCompletionDispatcherServlet完全处理完请求后被调用,可用于清理资源等 。所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。

SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。

Springmvc.xml加入拦截器实现逻辑CommonInterceptor

   

    

        

   

           

           

           

        

       

       

   

14.    说美图这个项目美妆APP是杭州这边全权负责,初期团队java开发十几个其他科技的人员五十几个,工作强度会比较大。

 

HR面试:15min

15.    之前公司遇到的争执如何处理。

16.    为什么换城市。

17.    原来公司工作强度怎么样,说美图接近996,周六加班有加班费。

18.    大概说了下公司有哪些产品。

 

你可能感兴趣的:(面试经验)