今天阿里巴巴让我在线编程

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.csdn.net/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.csdn.net/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————

与阿里巴巴的面试也有好几次了,最早是在好几年前,我初出茅庐,电话面试啥也不懂。都是心酸史。今天阿里巴巴让我在线写一段程序,在一个网页上,他们能在线看见我在写什么。

题目是:实现一个缓存容器,支持容量指定和超出容量按照热度淘汰,同时尽可能保证多线程环境的读写性能,不能使用外部三方库

 

给我的时间限制是一个小时:我大概写了如下程序,不能运行,没有调试,也没有太多的深入思考,时间有限啊。现在把代码贴出来了。

 

//缓存接口 
public interface Cache{
     Object get(String key);
     boolean delete(String key);
     boolean put(String key,Object value);
     boolean clear();
 }
 //带热度的值
 public class HotMatrix{
     private AutomicLong hot=new AutomicLong(0);
     private Object data;
     
     public void setData(Object data){
         this.data=data;
     }
     
     public Object getData(){
         return this.data;
     }
     
     public void incrementHot(){
         hot.incrementAndGet();
     }
     
     public long getHot(){
         return this.hot.longValue();
     }
 }
 //一个简单缓存实现
 public class MyCache implements Cache {
    private long maxSize;
    private volatile AutomicLong currentSize=0L;
    private Map<String,HotMatrix> data=new ConcurrentHashMap<String,HotMatrix>(maxSize);
    
    public MyCache(int size){
        this.maxSize=size;
    }
    
    private synchronized void deleteLeastHottest(){
        Collection<HotMatrix> values=data.values();
        Collections.sort(values,new Comparator<HotMatrix>(){  
            @Override  
            public int compare(HotMatrix b1, HotMatrix b2) {  
                return b1.getHot()>b2.getHot();
            }  
              
        }); 
        
        Iterator it=values.Iterator;
        while(it.hasNext()){
            HotMatrix val=it.next();
            if(!it.hasNext()){
                values.remove(val);
            }
        }
    }
    public Object get(String key){
        HotMatrix hotValue=data.get(key);
        Object value=hotValue.getData();
        hotValue.incrementAndGet();
        return value;
    }
    public boolean delete(String key){
        data.remove(key);
        return true;
    }
    public boolean put(String key,Object value){
        HotMatrix hotValue=new HotMatrix();
        hotValue.setData(value);
        if(data.contains(key){
            data.put(key,hotValue);
            return true;
        }
        if(currentSize>=maxSize){
            deleteLeastHottest();
            
        }
        data.put(key,hotValue);
        currentSize.incrementAndGet();
        return true;
    }
    public boolean clear(){
        data.clear();
        return true;
    }
     
 }
 //缓存管理接口
 public interface CacheManager{
     void setCache(Cache cache);
     Object get(String key);
     boolean delete(String key);
     boolean put(String key,Object value);
     boolean clear();
 }
 //一个简单的缓存管理实现
 public class MyCacheManager implements CacheManager{
     private static volatile MyCacheManager instance;
     private Cache cache;
     private Lock lock=new Reentrantlock();
     
     private MyCacheManager(){}
     
     private MyCacheManager(Cache cache){
         this.cache=cache;
     }
     
     public static CacheManager getInstance(){
         if(instance==null){
             lock.lock()
             try{
                 if(intance==null){
                     instance=new MyCacheManager()
                 }
             }finally{
                 lock.unlock();
             }
         }
         return instance;
     }
     
     public void setCache(Cache cache){
         this.cache=cache;
     }
     
     public Object get(String key){
         return this.cache.get(key);
     }
     public boolean delete(String key){
         return this.cache.delete(key)
     }
     public boolean put(String key,Object value){
         return this.cache.put(key,value);
         
     }
     public boolean clear(){
         return this.cache.clear();
     }
     
 }
     
     
//测试
public class Test{
    public static void main(String[]args){
        CacheManager manager= MyCacheManager.getInstance();
        manager.setCache(new MyCache(10L));
        manager.put("java","java编程思想");
        manager.put("java","java编程思想");
        manager.put("java","java编程思想");
        manager.put("java","java编程思想");
        
        Object value=manager.get("java");
        manager.delete("java");
        manager.put("java","java编程思想");
        manager.clear();
        
        Thread t1=new Thread(new Runnable(){
           public void run(){
               manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.put("scala","scala编程思想");
                Object value=manager.get("java");
                manager.delete("java");
                manager.put("java","java编程思想");
                manager.clear();
           } 
        });
        
        Thread t2=new Thread(new Runnable(){
           public void run(){
               manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.put("java","java编程思想");
                manager.delete("java");
                Object value=manager.get("java");
                manager.put("scala","scala编程思想")
                value=manager.get("scala");
                manager.put("java","java编程思想");
                manager.clear();
           } 
        });
        
        t1.start();
        t2.start();
    }
}

 

 

 

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值