首页 > 其他分享 >粤港澳大湾区日常实习

粤港澳大湾区日常实习

时间:2023-01-09 21:45:04浏览次数:37  
标签:compute 大湾 private final result arg 实习 粤港澳 public

1.代码优化题

//如下代码,compute是一个耗时操作,如果多个线程并发访问,可能会造成多个线程同时执行compute操作,如何进行优化?(完全不写题目,面试官也完全不说话,题意全靠自己猜...)
//优化思路:大致意思是需要同步加锁,但这个题意的不同的k是可以并发执行的,同一个k只需要执行一次compute即可,故这里应该加一个
public class Memoizer<A, V> implements Computable<A, V> { private final Map<A, V> cache = new ConcurrentHashMap<A, V>(); private final Map<A,F> flag; private final Computable<A, V> c; public Memoizer(Computable<A, V> c) { this.c = c; } @Override public V computer(A arg) throws InterruptedException { V result = cache.get(arg); if (result == null) { result = c.compute(arg); // 耗时操作 cache.put(arg, result); } return result; } } public interface Computable<A, V> { V compute(A arg) throws InterruptedException; }

  

public class Memoizer<A, V> implements Computable<A, V> {
    private final Map<A, V> cache = new ConcurrentHashMap<A, V>();
    private final Map<A,F> flag; 
    private final Computable<A, V> c;

    public Memoizer(Computable<A, V> c) {
        this.c = c;
    }
public LockByKey lockByKey = new LockByKey(); @Override public V computer(A arg) throws InterruptedException { V result = cache.get(arg);
     try{
       lockByKey.lock(key);   if (result == null) {
            result = c.compute(arg); // 耗时操作   cache.put(arg, result); }
}finally{
    lockByKey.unlock(key); return result; } } public interface Computable<A, V> { V compute(A arg) throws InterruptedException; }

public class LockByKey {
    
    private static class LockWrapper {
        private final Lock lock = new ReentrantLock();
        private final AtomicInteger numberOfThreadsInQueue = new AtomicInteger(1);
        
        private LockWrapper addThreadInQueue() {
            numberOfThreadsInQueue.incrementAndGet(); 
            return this;
        }
        
        private int removeThreadFromQueue() {
            return numberOfThreadsInQueue.decrementAndGet(); 
        }
        
    }
    
    private static ConcurrentHashMap<String, LockWrapper> locks = new ConcurrentHashMap<String, LockWrapper>();
    
    public void lock(String key) {
        LockWrapper lockWrapper = locks.compute(key, (k, v) -> v == null ? new LockWrapper() : v.addThreadInQueue());
        lockWrapper.lock.lock();
    }
    
    public void unlock(String key) {
        LockWrapper lockWrapper = locks.get(key);
        lockWrapper.lock.unlock();
        if (lockWrapper.removeThreadFromQueue() == 0) { 
            // NB : We pass in the specific value to remove to handle the case where another thread would queue right before the removal
            locks.remove(key, lockWrapper);
        }
    }
    
}

  

2.sql语句优化

SELECT * FROM user AS a LEFT JOIN user_info AS b ON a.id = b.user_id where gender=1 AND age>20;
  •   select * 十分耗时,因为需要回表,并且io的数据量比较大
  •   可以建立gender与age的联合索引,可以减少数据的扫描数量
  •   将select * 改为所需要的属性后,可以根据多个属性建立联合索引,可以减少回表操作
  •    建立联合索引是要注意顺序,在这里genger应放在前面,因为联合索引遇到范围查询会停止,其他需要返回的属性可以放在最后
  •        可以将where的语句合并在on中

3.算法题--写一个快排

void quickSort(int[] nums,int l,int r){
        //int l = 0, r = nums.size();
        int mid = nums[(l+r)>>1];
        int left = l-1, right = r+1;
        while(left<right){
            do left++; while(nums[left]<mid);
            do right--; while(nums[right]>mid);
            if(left<right){
                swap(nums[left],nums[right]);
            }
            quickSort(nums,l,right);
            quickSort(nums,right+1,r);
           
        }
}
int main(){
    int nums[] = {5,3,2,1};
    quickSort(nums,0,nums.size());
    return; 
}

  

 

 

标签:compute,大湾,private,final,result,arg,实习,粤港澳,public
From: https://www.cnblogs.com/lyjps/p/17038604.html

相关文章

  • 滴滴云实习
    滴滴云是一个toB平台,主要业务方向:面向kafka用户打造的共享多用户kafka云平台,专注于kafka运维管控、监控警告、资源治理等核心场景。实习期间我主要参与到的是Logi-Common模......
  • OPPO暑期实习记录
    1、浏览器业务接入Goblin自动化测试框架1)传统单元测试痛点>单元测试数据依赖复杂且无法实现数据隔离>mock框架学习成本高,代码冗余>基于内存实现成本高,且易出现生产环境......
  • git和git bundle: 一个有趣的实习笔试题目提交
    以下代码均为terminal中的shell指令先gitinitmkdirreshapecdreshapegitinit再gitadd所需要加入的文件gitaddReadme.mdgitaddreshape.py然后gitcommit......
  • 【线上实习项目】助力你的校招!
    ​【线上实习项目】助力你的校招!​23届正式秋招快要结束,可在写简历的时候,无论多努力也憋不出来一个像样的实习经历,又不敢造假,经历真实与否,HR一问就会露馅。该怎样充实自己的......
  • 【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特
    ......
  • 备战实习求职的一些感想(已拿阿里offer)
    1.前言本篇为我(bigsai)的非常要好的朋友(小G)总结的一些经验,上天去南京游了老门东、夫子庙,第二天去小G那边蹭了一顿饭,然后一起逛了鸡鸣寺和玄武湖,离开前问他要了经验贴没......
  • 2022暑期实习面试
    快手一面自我介绍进程与线程的概念了解过协程嘛?没有协程是比线程更加轻量级的存在,一个线程可以有多个协程,并且不被操作系统内核所管理(用户态执行),线程......
  • 日常实习
    字节上海国际电商自我介绍面向对象相关的封装、继承、多态是否有了解可以简单介绍一下多态吗?还有吗?在Java中多态也叫动态绑定,相比于c语言的静态绑定,多态可以保证基......
  • 2018 大湾区(深圳) .NET技术分享交流会 第一期
    .NETCore2.1已于2018年5月30日正式发布,邀请粤港澳大湾区.NET技术专家和从业人员,一起分享与交流.NET技术的发展方向,提高粤港澳大湾区.NET技术交流氛围,挖掘.NET高级人才,为......
  • 实习总结(第六天)
    昨天晚上得到了一些数据,今天主要的任务是把这些数据测试一下,再熟悉一下软件的具体流程。首先梳理了一下文件上传功能的bug1、在上传的时候,第一次上传通常会失败,第二次再......