阿里实习面试总结

简介:

这次妥妥的倒在了一面上。还是基础不够扎实。

1. 重载与多态区别

重载(overload)一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。 重载的规则: a、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样); b、不能通过访问权限、返回类型、抛出的异常进行重载; c、方法的异常类型和数目不会对重载造成影响;

重写/覆盖(override),子类在继承父类时,重写父类中的方法。 重写的规则: a、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. b、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。 c、重写的方法的返回值必须和被重写的方法的返回一致; d、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; e、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 f、静态方法不能被重写为非静态的方法(会编译出错)。

多态为了避免在父类里大量重载引起代码臃肿且难于维护。通过重写实现。


public class Shape {  
    public static void main(String[] args) {  
        Triangle tri = new Triangle();  
        System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承  
        Shape shape = new Triangle();  
        System.out.println("My shape has " + shape.getSides() + " sides."); // 多态  
        Rectangle Rec = new Rectangle();  
        Shape shape2 = Rec;  
        System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); // 重载  
    }  

    public boolean isShape() {  
        return true;  
    }  

    public int getSides() {  
        return 0;  
    }  

    public int getSides(Triangle tri) { // 重载  
        return 3;  
    }  

    public int getSides(Rectangle rec) { // 重载  
        return 4;  
    }  
}  

class Triangle extends Shape {  
    public int getSides() { // 重写,实现多态  
        return 3;  
    }  
}  

class Rectangle extends Shape {  
    public int getSides() { // 重写,实现多态  
        return 4;  
    }  
}


2. read()执行时操作系统完成的工作

3. 进程有哪些状态

基本状态:运行-就绪-阻塞(也称为等待或睡眠)。实际的系统中经常引入新建态和终止态。有的系统引入了挂起态。 Java线程状态共6个:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED

4. url中参数去掉一部分的算法

当时想到了切分字符串和正则替换,但是写的正则有问题。面试结束和面试官交流,他提示扫描一遍就可以。


package monitor;  

import java.util.Arrays;  

class CheckHelper {  
    private char temp[] = new char[64];  
    private String params[];  
    private boolean check[];  
    private int tag = 0;  

    public CheckHelper(String params[]) {  
        this.params = params;  
        check = new boolean[params.length];  
    }  

    public void initCheck() {  
        for (int i = 0; i < check.length; i++)  
            check[i] = true;  
        tag = 0;  
    }  

    public void doCheck(char c) {  
        for (int i = 0; i < params.length; i++) {  
            String param = params[i];  
            temp[tag] = c;  
            if (tag >= param.length() || param.charAt(tag) != c) {  
                check[i] = false;  
            }  
        }  
        tag++;  
    }  

    public String getResult() {  
        for (int i = 0; i < params.length; i++) {  
            String param = params[i];  
            if (check[i] && param.length() == tag) {  
                initCheck();  
                return null;  
            }  
        }  
        String ret = new String(Arrays.copyOf(temp, tag));  
        initCheck();  
        return ret;  
    }  
}  

public class Test {  
    public static String removeParam(String url, String[] params) {  
        CheckHelper ch = new CheckHelper(params);  
        ch.initCheck();  
        StringBuilder sb = new StringBuilder();  
        boolean start = false;  
        boolean rest = false;  
        boolean copy = false;  
        for (int i = 0; i < url.length(); i++) {  
            char c = url.charAt(i);  
            if (!start) {  
                sb.append(c);  
                if (c == '?')  
                    start = true;  
            } else if (c == '=') {  
                rest = true;  
                String ret = ch.getResult();  
                if (ret != null) {  
                    if (sb.charAt(sb.length() - 1) != '?')  
                        sb.append('&');  
                    sb.append(ret);  
                    sb.append('=');  
                    copy = true;  
                } else {  
                    copy = false;  
                }  
            } else if (!rest) {  
                ch.doCheck(c);  
            } else if (c != '&') {  
                if (copy)  
                    sb.append(c);  
            } else {  
                ch.initCheck();  
                rest = false;  
                copy = false;  
            }  
        }  
        return sb.toString();  
    }  

    public static void main(String[] args) throws Exception {  
        String url = "http://s.taobao.com/search?spm=a230r.1.0.100.S98nmj&" +  
                "q=Apple%2F%C6%BB%B9%FB+MacBook+Pro+MD101CH%2FA&v=product&p=" +  
                "detail&pspuid=202666380&cat=1101&from_pos=55_1101.xlcombo_1_2_202666380";  
        String[] params = { "spm", "pspuid", "cat" };  
        System.out.println(removeParam(url, params));  
    }  
}


PS. 2014年的今天已经是阿里巴巴的一员了。觉得应该对自己的Java有信心并提出让Java工程师来面试我。

目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
17天前
|
SQL 关系型数据库 MySQL
阿里面试:1000万级大表, 如何 加索引?
45岁老架构师尼恩在其读者交流群中分享了如何在生产环境中给大表加索引的方法。文章详细介绍了两种索引构建方式:在线模式(Online DDL)和离线模式(Offline DDL),并深入探讨了 MySQL 5.6.7 之前的“影子策略”和 pt-online-schema-change 方案,以及 MySQL 5.6.7 之后的内部 Online DDL 特性。通过这些方法,可以有效地减少 DDL 操作对业务的影响,确保数据的一致性和完整性。尼恩还提供了大量面试题和解决方案,帮助读者在面试中充分展示技术实力。
|
2月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
2月前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
Kubernetes 架构师 算法
阿里面试:全国14亿人,统计出重名最多的前100个姓名
文章介绍了如何解决“从全国14亿人的数据中统计出重名人数最多的前100位姓名”的面试题,详细分析了多种数据结构的优缺点,最终推荐使用前缀树(Trie)+小顶堆的组合。文章还提供了具体的Java代码实现,并讨论了在内存受限情况下的解决方案,强调了TOP N问题的典型解题思路。最后,鼓励读者通过系统化学习《尼恩Java面试宝典》提升面试技巧。
阿里面试:全国14亿人,统计出重名最多的前100个姓名
|
2月前
|
存储 Kubernetes 架构师
阿里面试:JVM 锁内存 是怎么变化的? JVM 锁的膨胀过程 ?
尼恩,一位经验丰富的40岁老架构师,通过其读者交流群分享了一系列关于JVM锁的深度解析,包括偏向锁、轻量级锁、自旋锁和重量级锁的概念、内存结构变化及锁膨胀流程。这些内容不仅帮助群内的小伙伴们顺利通过了多家一线互联网企业的面试,还整理成了《尼恩Java面试宝典》等技术资料,助力更多开发者提升技术水平,实现职业逆袭。尼恩强调,掌握这些核心知识点不仅能提高面试成功率,还能在实际工作中更好地应对高并发场景下的性能优化问题。
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
21天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
22天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
46 4