面试互联网相关面试题

Posted 逆流°只是风景-bjhxcc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试互联网相关面试题相关的知识,希望对你有一定的参考价值。

文章目录

问题一:请简单做下自我介绍

这个问题一般都是面试的必问题,通常也是面试中的第一道题!时间应当控制在一分钟左右。

从我们上小学开始,老师上课的第一件事就都是先让大家做下自我介绍,以便增强大家对你的了解,在现在的企业面试中也是一样的道理,一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验等。

其实,企业问这个问题的目的除了是对求职者有一个简单的了解以为,更希望知道是的求职者能否胜任这份工作,因此在我们的自我介绍中应当包括:最强的技能,最深入研究的知识领域,个性中最积极的部分,做过的最成功的事,主要的成就等。这些可以和学习无关,也可以和学习有关,但是要突出积极的个性和做事的能力,能够让企业从这一点上认识到你的特点,但同时也要说得合情合理企业才会相信。

同时企业是很重视一个人的礼貌的,求职者要尊重考官,在回答每一个问题之后都说一句谢谢,企业喜欢有礼貌的求职者,这样也能在面试的开头就给面试官留下一个好的印象。

问题二:你对加班的看法&你能接受加班吗?

对于企业问这样的问题,很多小伙伴的第一反应就是这个企业会经常要求加班,并且会和面试官说“只要有加班费就会加班”,但是这样回答基本上你的面试已经over了。

实际上好多公司问这个问题,但并不证明一定要加班的,只是测试你是否愿意为公司奉献,

回答样本:我能接受加班,如果是工作需要我会主动加班,毕竟我现在还年轻,还有很大的进步空间,可以全身心的投入工作,但同时我也会提高工作效率,减少不必要的加班。

这样企业就会觉得你十分的有上进心,同时是愿意为公司做出贡献和奉献精力的。

问题三:你还有什么要问的吗?

这个问题一般都会放在面试官没有什么问题的时候或者面试的最后环节会问的问题。大部分人都会说“没什么问题了”或者说问“请问能给到多少的月薪呀?”一般这样的回答也是预示着你距离“淘汰”没多远了。

这个问题看上去可有可无,但其实很关键,企业不喜欢说“没问题”的人,因为企业很注重员工的个性和创新能力,企业不喜欢求职者问个人福利之类的问题,但是如果有人这样问:“贵公司对新人员工有没有什么培训项目,培训计划大概怎么安排,或者说贵公司的晋升机制是怎么样的?”企业将很欢迎,因为体验出你对学习的热情和对公司的忠诚度以及你的上进心。

问题四:说说你最大的优点&缺点

这个问题企业问的概率一般还是很大的,面试官通常不希望听到直接回答的优点缺点是什么,如果求职者在缺点方向说自己小心眼、爱嫉妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。并且还会觉得你这个人有问题。

同时呢,也绝对不要自作聪明的回答:“我最大的缺点就是过于追求完美”,有的人认为这样的回答能显得自己比较出色,但实际上他已经岌岌可危了。

那么具体应该如何应对这个问题呢?实际上企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。换位思考一下,你是不是更愿意听别人跟你举例子,而不是直接说自己有什么不好的地方。

问题五:你对薪资有什么要求?

注意这个问题一般都是面试官在给应聘者挖坑,如果你对薪资的要求太低,那显得贬低自己的能力,如果你对薪资的要求太高,那又会显得你分量过重,公司受用不起,一些面试官通常都会事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过是想证实一下这笔钱是否足以引起你对该工作的兴趣。

因此尽可能说出具体数目,但不要说一个宽泛的范围,那样你将只能得到最低限度的数字,这样表明你已经对当今的人才市场做了调查,知道像自己这样学历的雇员有什么样的价值。因此最正确的回答应该是根据自己能力对自己进行评估,然后再结合当下专业的平均薪资给出一个具体的薪资。

问题六:在五年的时间内,你的职业规划?

这是每一个应聘者都不希望被问到的问题,但是几乎每一个人都会被问到,比较多的答案是:“想当管理者”,这样应聘者可能会觉得自己的回答比较进取有目标,但是面试官一般都会想你可能知识单纯的野心比较大并且没有什么实际的目标,面试官自己可能工作了好几年还没做到管理呢。

但是对于近几年来,许多公司都已经建立了专门的技术途径,这些工作地位往往被称作“顾问”“参议技师”或“高级软件工程师”等等,当然,说出其他一些你比较感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作,要知道,考官总是喜欢有进取心的应聘者,此刻如果说“不知道”,或许就会使你失去一个好的机会。因此最普通的回答应该是:“我准备在技术领域有所作为”或“我希望能够按照公司的管理思路发展”

好了,关于面试中常见的问题及回答就和大家聊到这里,小伙伴们在面试中遇到的哪些问题也可以评论和大家一起分享。

互联网JAVA面试常问问题



前几篇文章,都介绍了JAVA面试中锁相关的知识。其实关于JAVA锁/多线程,你还需要知道了解关于ReentrantLock的知识,本文将从源码入手,介绍可重入锁的相关知识。

ReentrantLock

先来看看ReentrantLock的源码,部分代码块用省略号代替,后面会详细展开介绍:

public class ReentrantLock implements Lock, java.io.Serializable {    

   private
static final long serialVersionUID = 7373984872572414699L;    
   
   /** Synchronizer providing all implementation mechanics */
   private final Sync sync;        
   abstract
static class Sync extends AbstractQueuedSynchronizer {        
       
       private
static final long serialVersionUID = -5179523762034025860L;        /**         * Performs {@link Lock#lock}. The main reason for subclassing         * is to allow fast path for nonfair version.         */        abstract void lock();        /**         * Performs non-fair tryLock.  tryAcquire is implemented in         * subclasses, but both need nonfair try for trylock method.         */        final boolean nonfairTryAcquire(int acquires) {            .......        }        
       protected
final boolean tryRelease(int releases) {            int c = getState() - releases;            
           if (Thread.currentThread() != getExclusiveOwnerThread())                
               throw
new IllegalMonitorStateException();            boolean free = false;            
           if (c == 0) {              free = true;              setExclusiveOwnerThread(null);            }
                       setState(c);            
           return
free;        }        
               
       protected final boolean isHeldExclusively() {            
           // While we must in general read state before owner,            // we don't need to do so to check if current thread is owner            return getExclusiveOwnerThread() == Thread.currentThread();        }        
       ........
   }    /**     * Sync object for non-fair locks     */    static final class NonfairSync extends Sync {       .......    }    /**     * Sync object for fair locks     */    static final class FairSync extends Sync {       ...........    }   .......... }

可以看出可重入锁的源码中,其实实现了公平锁和非公平锁。

ReentrantLock中有一个静态内部抽象类Sync,然后有NonfairSync和FairSync两个静态类继承了Sync。

其中Sync继承了AQS(AbstractQueuedSynchronizer),接下来的文章中会介绍详细AQS。

我们在使用可重入锁的时候,需要明显的加锁和释放锁的过程。一般在finally代码中实现锁释放的过程。

Lock lock = new ReentrantLock();

Condition condition = lock.newCondition();
lock
.lock();

try {  while(条件判断表达式) {      condition.wait();  }
// 处理逻辑

}
finally
{  
 lock.unlock();
 }
非公平锁的实现
    static final class NonfairSync extends Sync {        
   private static final long serialVersionUID = 7316153563782823691L;        
       /**         * Performs lock.  Try immediate barge, backing up to normal         * acquire on failure.         */        final void lock() {            
           if (compareAndSetState(0, 1))                setExclusiveOwnerThread(Thread.currentThread());            
           else                acquire(1);        }        
       protected
final boolean tryAcquire(int acquires) {            
           return
nonfairTryAcquire(acquires);        }    }

可以看出,非公平锁在执行lock的时候,会用CAS来尝试将锁状态改成1,如果修改成功,则直接获取锁,用setExclusiveOwnerThread方法讲当前线程设置为自己。如果没有修改成功,则会执行acquire方法来尝试获取锁。其中,nonfairTryAcquire实现如下:

        final boolean nonfairTryAcquire(int acquires) {            
       final Thread current = Thread.currentThread();          
       int c = getState();            
       if (c == 0) {                
       if (compareAndSetState(0, acquires)) {                    setExclusiveOwnerThread(current);                    
                   return true;                }            }            
        else if (current == getExclusiveOwnerThread()) {                
           int
nextc = c + acquires;                
           if
(nextc < 0) // overflow                    throw new Error("Maximum lock count exceeded");               setState(nextc);                
            return true;            }            
            return false;        }

可以看出这个方法,其实也是在用CAS尝试将线程状态置为1。其实也是一个多次尝试获取的过程。

所以,对于非公平锁,当一线程空闲时候,其他所有等待线程拥有相同的优先级,谁先争抢到资源即可以获取到锁。

公平锁的实现
  static final class FairSync extends Sync {        
       private
static final long serialVersionUID = -3000897897090466540L;        
   
   final
void lock()
{            acquire(1);        }        /**         * Fair version of tryAcquire.  Don't grant access unless         * recursive call or no waiters or is first.         */        protected final boolean tryAcquire(int acquires) {            
           final
Thread current = Thread.currentThread();            
           int
c = getState();            
           if (c == 0) {                
               if (!hasQueuedPredecessors() &&                    compareAndSetState(0, acquires)) {                    setExclusiveOwnerThread(current);                    
                   return true;                }            }            
          else if (current == getExclusiveOwnerThread()) {                
              int nextc = c + acquires;                
              if (nextc < 0)                    
                  throw new Error("Maximum lock count exceeded");               setState(nextc);                
              return true;            }            
              return false;        }    }

主要看当公平锁执行lock方法的时候,会调用 acquire方法, acquire方法首先尝试获取锁并且尝试将当前线程加入到一个队列中,所以公平锁其实是维护了一个队列,谁等待的时间最长,当线程空闲时候,就会最先获取资源:

    public final void acquire(int arg) {        
   if (!tryAcquire(arg) &&            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))            selfInterrupt();    }

如果想了解acquireQueued的话,可以参照一下代码:

   final boolean acquireQueued(final Node node, int arg) {
        boolean failed = true;
        try {
            boolean interrupted = false;
            for (;;) {
                final Node p = node.predecessor();
                if (p == head && tryAcquire(arg)) {
                    setHead(node);                    p.next = null; // help GC
                    failed = false;
                    return interrupted;
                }
                if (shouldParkAfterFailedAcquire(p, node) &&                    parkAndCheckInterrupt())
                    interrupted = true;
            }
        } finally {
            if (failed)
                cancelAcquire(node);        }    }

综上,可重入锁利用CAS原理实现了公平锁和非公平锁,为什么叫做可重入锁呢?其实在代码方法tryAcquire中可以看到,线程可以重复获取已经持有的锁。

if (current == getExclusiveOwnerThread()) {                
   int
nextc = c + acquires;                
   if (nextc < 0) // overflow         throw new Error("Maximum lock count exceeded");    setState(nextc);                
   return true; }

今天小强从源码的角度分析了ReentrantLock,希望对正在学习JAVA的你有所帮助。

                      





以上是关于面试互联网相关面试题的主要内容,如果未能解决你的问题,请参考以下文章

Java高频面试题汇总--Java职场范儿

华为腾讯淘宝面试流程+面试技术题分析,速看

华为腾讯淘宝面试流程+面试技术题分析,速看...

Java面试题

[ Java面试题 ]Java 开发岗面试知识点解析

Java-SSM框架相关面试题整理!面试真题解析