面试笔记-(搜狐-java研发实习)

8 篇文章 0 订阅

介绍一下你这个项目,是自己做着玩的还是其他目的

微服务优缺点

        https://blog.csdn.net/boonya/article/details/52576362

微服务调用你们是怎么实现的,使用的feign声明式调用,那它的低层实现是采用的什么调用,httpClient效率不高

        https://blog.csdn.net/fwk19840301/article/details/80229572

nginx负载均衡策略

        https://www.cnblogs.com/andashu/p/6377323.html

redis数据结构,zset实现,主从交换策略

        https://www.cnblogs.com/hjwublog/p/5639990.html

        http://www.cnblogs.com/hjwublog/p/5660578.html

mysql索引,hash和b+tree区别及其使用场景,为什么使用b+树更多

        https://blog.csdn.net/endlu/article/details/51720299

        https://www.cnblogs.com/zengkefu/p/5647279.html

        https://blog.csdn.net/timchen525/article/details/77691190

hash、hashmap实现,扩容方式,是否安全,currentHashMap实现原理

        https://www.cnblogs.com/skywang12345/p/3310835.html

        https://blog.csdn.net/Carol_1992/article/details/76735656

synchronized jvm层实现

锁分类,重量级锁,轻量级锁,自旋锁,乐观锁、悲观锁区别及使用场景,公平锁和非公平锁,锁降级升级

volatile实现及其使用场景

rabbitmq和kafka的区别及其使用场景

        https://blog.csdn.net/sinat_27634939/article/details/80301656

算法:给定一个数组大小为n,数值范围为1~n-1,如何快速找出数组中第一个重复的数?若不能使用额外的内存空间,时间复杂度在n^2之内呢?

        采用空间换时间方式

        循环比较相邻的两个数,若相等则出现重复

(不知道他是不是想问下面这个问题)

怎么找出n在数组中出现的第一个位置

有一个数组a,有1000个元素,已经按照从小到大排序好,但是其中可能有重复的,请问怎么找出n在数组中出现的第一个位置?先简单说明你的思路,再写出代码,可以用伪代码。
用二分法实现,没找到的话返回 -1。

/**
 * 首先二分法查找该数n出现的位置,然后判断是否是第一次出现,
 * 如果不是则往前比较,直至第一次出现的地方.(index+1)
 */
public static void main(String[] args) {
    //待搜索数组,此处长度为10,可自行定义
    int[] a = {0, 1, 2, 3, 4, 4, 5, 5, 5, 6};
    int n = 5;
    int position = search(a, 0, a.length - 1, n);
    //显示查找结果
    if (position == -1) {
        System.out.println("not exist!");
    } else {
        System.out.println("position:" + position);
    }
}

//二叉搜索
public static int search(int[] a, int left, int right, int n) {
    int pos = 0;
    while (left <= right) {
        pos = (left + right) / 2;
        if (n < a[pos]) {
            right = pos;
        } else if (n > a[pos]) {
            left = pos;
        } else {
            break;
        }
    }
    //用于测试此位置是否是n第一次出现的地方
    if (left <= right) {
        while (true) {
            if (pos > 0 && a[pos - 1] == a[pos]) {
                pos = pos - 1;
            } else {
                break;
            }
        }
    }
    if (a[pos] == n) {
        return pos + 1;
    } else {
        return -1;
    }
}

 

你有什么问题 ...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值