zoukankan      html  css  js  c++  java
  • 2015年阿里巴巴蚂蚁金服校招JAVA研发工程师内推电话面试

      没想到阿里校招如此之早,虽然早已进入复习备战状态,但还是感觉有些措手不及。。。找了个在蚂蚁金服做HR的同学帮忙了内推,然后在最近的几天匆匆忙忙地复习JAVA(之前都把精力放在了数据结构、算法等基础上了)。上周五投递的简历,这周四就接到了面试电话,面试GG声音很有磁性,也比较温柔。。。一开始是自我介绍,妈的,好紧张,可能是好久没面试了,感觉中气不足。自我介绍犹如叙说自传,废话讲了一大推,看来最好还是事先准备好一段台词。然后问了参加过哪些社团活动,还是因为紧张竟然把电脑医院的经历给漏说了。。不过这些都是次要的,感觉只是”前戏“,是面试官了解你并帮助你进入技术面试状态的一种方式,无须太介意自己说的怎么样。

      好了,转入正题。以下是面试官的几个问题,知识面还是涉及蛮广的,有JAVA、数据库、http方面的知识、前端以及linux。接下来一一阐述并且总结。

      1、Object类中的方法有哪些,它们各自的作用是什么?

      回答:我当时说了equals(),hashcode(),finalize(),clone(),然后说了它们各自的作用。对于clone()方法我当时提到了默认是浅层复制,然后面试官随即就问到深层复制和浅层复制的区别。我回答浅层复制的话原对象和被克隆对象的引用属性共用一个对象,而深层复制时引用变量类型的属性也会被复制一份。然后他继续问到clone的应用场景,这个问题没答上来。接着他让我用伪代码写一下如果一个对象覆盖equals方法,该怎么写?我边在草稿纸上写边和他说,中间有一步出现了差错,if(o instanceof Student)这一步我说成了强制转换,囧。。。如果不是Student类型的对象会抛出ClassCastException异常的呀,哎。。幸好其他的都是说对的。

      纠错:说了这四个方法,从数量来说尚可,但竟然把最基础的toString()和getClass()方法给忘了,还是因为太紧张的缘故吧。

      toString():重写该方法可以对对象进行自定义的格式输出。默认输出是类名@hashcode值;

      getClass():获取该对象的类类型。

      wait():如果对象调用了wait方法,那么持有该对象的线程会把该对象的控制权交出去,然后处于等待状态。

      notify():如果对象调用了notify()方法就会通知某个正在等待该对象的控制权的线程可以继续运行,但必须等待当前线程执行完sychronized中的代码块。

      notifyAll():如果对象调用了notifyAll()方法就会通知所有正在等待该对象的控制权的线程可以继续运行,但必须等待当前线程执行完sychronized中的代码块。

      关于wait和notify的总结

      以上对wait和notify的理解不是很到位。一个线程中的某个同步共享对象执行wait方法,该线程就释放了该对象的对象锁,进入对象等待池,等待被唤醒;在另一个线程中,这个同步共享变量执行notify方法,唤醒因wait而正在等待使用该对象的线程,使其进入对象锁等待池,有机会获得对象锁,等到获取对象锁,该线程获得CPU调度,继续运行。需要注意wait、notify以及notifyall方法必须在synchronized代码块中,切记!

      详见synchronized与lock的区别。

      2、谈谈对事务的理解。

      根据事务的原则来谈对事务的理解,然后举了一个A账户给B账户转账的例子来解释。

      3、Spring中的事务管理有哪两种?

      我只知道AOP有事务管理的功能。。。

      4、接下来是有关数据库锁的一个问题:在分布式服务器群中,有两台服务器对共享数据库的同一条数据进行并发修改,如果解决同步问题。

      这个问题完全不会。最后的答案是可以在该表中增加一个字段,A服务器操作时,将该字段的值改为正在修改的标记,则B服务器去操作时,查询该字段的值,判断是否有其他服务器正在修改该行数据,如果有则等待,否则可以去修改该行数据。这里的两台服务器好比是线程,而字段好比是线程锁。学习了,呵呵。。。

      5、考察hashmap。

      说了关于hashmap的理解,自己说的都是很多JAVA面试题中常考的哪些知识点,比如实现原理啊,是否线程安全等,这些都没问题。但后面他继续问hashmap两种迭代的方式,各自的时间复杂度是多少?点击详情

      6、Servlet的生命周期,是否是线程安全的?

      Servlet的生命周期:Servlet类加载-->实例化-->服务-->销毁。servlet是单例,所以是线程不安全的,需要处理线程同步问题。具体方法:对于线程共享的变量,应该用synchronized对使用该共享变量时的那段代码加锁,使当前线程获得该Servlet对象的对象锁。

    关于synchronized的使用,点击。

      7、对session的理解。

      session是用于保存用户状态的一种机制。服务器端保存用户状态信息,并分配一个sessionID给客户端,客户端通过cookie机制在浏览器保存这个SessionID,在下次访问同一个URL时,浏览器会把该URL对应的sessionID传递给服务器端,服务器端根据这个sessionID查询对应的用户状态信息。如果浏览器端cookie遭禁用,则可以再URL重写来实现sessionID的传递。

      8、了解前端的一些知识吗?

      html+css+js

      9、get和post的区别?

      区别容易,他问我get和post分别能传递多少字节量的数据。我说get是几kb吧,post不知道具体的数量级,反正要比get大很多。。。事实上get是1024byte,post没有限制。。

      10、熟悉的linux命令有哪些?

      报了一些熟悉的命令,他说可以了。。

  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/hzhtracy/p/4636185.html
Copyright © 2011-2022 走看看