大二苦逼Javaer求建议~

目前大二下(双非),正在实习,是Java开发岗位,技术栈就学到cloud,看了两遍cloud视频,但是很久没用了。像那些nginx、es我都没学。(es之前看了两遍现在已经不会了)
算法力扣200+,简单题可以写,中等题基本G了的水平。
实习的时候也在看书,MySQL技术内幕、jvm、Redis啥的,所以现在八股能力 > 码力
这个暑假想学一点大数据开发相关的东西,建议吗?我打算是这个暑假刷一些题,每天三道吧,然后再学一些大数据有关的东西。
或者说有没有什么建议的学习内容吗?其实学大数据的技术栈的时间可以替换成其他的,但是我不知道学啥了。求佬给建议~每一个建议我都会认真看的。

可以的话我给一些建议:

  1. 对Java基础巩固,多刷算法题和面向对象题目,这是必须的。可以选一本算法与数据结构的书籍系统学习。
  2. 学习大数据相关技术,比如Hadoop、Hive、Spark等。这些技术市场需求较大,很有价值。可以找一些视频来学习,搭建个学习环境练手。
  3. 学习NoSQL数据库,如Redis、MongoDB等。这也是大数据技术栈的一部分,很重要。
  4. 熟悉Linux系统,大数据开发离不开Linux环境。可以找一本Linux入门书籍学习。
  5. 了解常见的大数据框架,比如Storm、Flink等。至少知道它们的定位和作用。
  6. 关注最新技术动向,比如AI、云计算、区块链等。这些技术发展很快,值得学习。
  7. 提高自己的英语能力。大数据开发的资料主要是英文的,英语阅读理解能力很关键。
    总之,在这段时间里,我建议你主要学习大数据技术栈,兼顾一些新技术的学习。同时不要放弃对Java和算法的学习和练习。这样可以实现知识面的拓展,为以后的发展打下良好基础。
    另外,找一份比较适合的实习也很重要,实际工作经验也是非常宝贵的。
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    建议: 1. 推荐学习大数据相关的基础知识,包括Hadoop生态圈、Spark、Flume、Kafka、Hive等,可以通过在线课程、书籍等途径进行学习。 2. 学习Elasticsearch(以下简称es)可以提高检索性能,对于实时性要求不太高的业务场景,可以作为替代关系型数据库的方案。可以通过官方文档、书籍等途径进行学习。 3. 学习Nginx可以用于反向代理、负载均衡、限流等,可以提高系统可用性和性能,可以通过官方文档、书籍等途径进行学习。 4. 可以学习观察者模式,可以用于实现事件监听、消息通知等功能,可以通过书籍、代码实践等途径进行学习。 5. 建议了解服务注册与发现,可以通过Spring Cloud Eureka或者Zookeeper进行实践。

    针对限流相关的知识,以下是一个基于令牌桶算法的Java实现示例:

    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    public class TokenBucket {
    
        private int capacity; //桶的大小
        private double rate; //令牌产生速度(token/s)
        private int tokens; //当前桶中的令牌数
        private long lastTime; //上次令牌产生时间
        private BlockingQueue<Object> queue; //用于存储请求的队列
    
        public TokenBucket(int capacity, double rate) {
            this.capacity = capacity;
            this.rate = rate;
            this.tokens = capacity;
            this.lastTime = System.currentTimeMillis();
            this.queue = new ArrayBlockingQueue<>(capacity);
            init();
        }
    
        private void init() {
            ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
            scheduler.scheduleAtFixedRate(new Runnable() {
                @Override
                public void run() {
                    int count = (int) (System.currentTimeMillis() - lastTime) * rate / 1000;
                    tokens = Math.min(capacity, tokens + count);
                    lastTime = System.currentTimeMillis();
                }
            }, 1, 1, TimeUnit.SECONDS);
        }
    
        public boolean acquire(long timeout, TimeUnit unit) throws InterruptedException {
            boolean success = queue.offer(new Object(), timeout, unit);
            if (!success) {
                return false;
            }
            synchronized (this) {
                if (tokens > 0) {
                    tokens--;
                    return true;
                } else {
                    queue.poll();
                    return false;
                }
            }
        }
    }
    

    上述代码中,令牌桶的大小和令牌产生速度可以通过构造函数进行设置。在桶中存储请求的队列采用了阻塞队列的实现,当队列满了时,新的请求会被拒绝。acquire方法用于从桶中获取令牌,如果获取成功,返回true,否则返回false。

    针对Nginx路径前缀的处理,可以通过配置文件进行设置,以下是一个示例:

    server {
        listen 80; 
        server_name crazydemo.com; 
        location /demo-provider/ {
            proxy_pass http://provider_ip:provider_port/api/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        }
    }
    

    在location中设置了路径前缀为/demo-provider/,对于请求 http://crazydemo.com:7799/demo-provider/api/demo/hello/v1,会被转发到 http://provider_ip:provider_port/api/demo/hello/v1。

    针对Nginx错误页面的配置,可以通过下列语句进行设置:

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html; 
    

    上述代码中,404错误会被重定向到/404.html,而500、502、503、504错误会被重定向到/50x.html。

    对于Linux环境下使用环境变量配置中间件相关信息,可以通过export语句设置环境变量,例如:

    export PROVIDER_IP=192.168.0.1
    export PROVIDER_PORT=8080
    

    在代码中可以通过System.getenv()方法获取环境变量的值,例如:

    String providerIp = System.getenv("PROVIDER_IP");
    String providerPort = System.getenv("PROVIDER_PORT");
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^