前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dimple在左耳听风ARTS打卡(十一)

Dimple在左耳听风ARTS打卡(十一)

作者头像
程序员小跃
发布2019-12-27 14:56:46
3600
发布2019-12-27 14:56:46
举报
文章被收录于专栏:程序员小跃

今天是端午节,也是高考的日子。小编当年是过了端午节高考的,今年也是赶上了,凑到了一起。你们家里人有要高考的吗?小编祝福他们。同时也祝各位端午节快乐!

所谓ARTS: 每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第十一期打卡。

这个ARTS打卡真的很赞,这几周因为没有提前准备,所以总是有一颗石子在心头挥之不去,生怕忘记打卡啥的。所以,还是坚持每天去寻找素材,搜集素材,只为能坚持下去,对得起自己的内心。

虽然有些时候,确实写的不咋滴,但是还是经过努力付出的,也算是给自己的交代。十一期了,继续努力前进。

Algorithm LeetCode算法

搜索插入位置 (https://leetcode-cn.com/problems/search-insert-position/)

题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

代码语言:javascript
复制
输入: [1,3,5,6], 5
输出: 2

示例 2:

代码语言:javascript
复制
输入: [1,3,5,6], 2
输出: 1

示例 3:

代码语言:javascript
复制
输入: [1,3,5,6], 7
输出: 4

示例 3:

代码语言:javascript
复制
输入: [1,3,5,6], 0
输出: 0

这题就是告诉大家怎么查找一个数字,而且是依次从大到小的查找,所以,你知道你怎么做了吗?

如果你想到了循环遍历,说明你热衷于基础知识的构建,对于性能没啥追求。所以,还有更好的办法不?LeetCode不就是在帮助我们找更好的解决办法吗?查找的算法,有好几个,对吧。这里,自然用的就是二分法查找来的更省力,相比于循环遍历,查找的次数自然就少了很多,性能也就提升上去啦。

可能对数据少的,是体会不出来的,所以当你提交答案的时候,会发现时间和内存消耗都不大,但是,如果你用了大数据量,那差距自然就会体现出来了,不信你试试。

代码语言:javascript
复制
/**
 * 
 * @Title: searchInsert
 * @Description: 通过遍历
 * @param nums
 * @param target
 * @return int
 * @throws
 */
public static int searchInsert(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    int length = nums.length;
    if (nums[0] == target) {
        return 0;
    }

    if (nums[length - 1] == target) {
        return length - 1;
    }

    for (int i = 0; i < length; i++) {
        if (nums[i] >= target) {
            return i;
        }
    }
    return length;
}
代码语言:javascript
复制
/**
 * 
 * @Title: searchInsert1
 * @Description: 通过二分法
 * @param nums
 * @param target
 * @return int
 * @throws
 */
public static int searchInsert1(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    int length = nums.length;
    int low = 0;
    int high = length - 1;
    if (nums[low] == target) {
        return 0;
    }

    if (nums[high] == target) {
        return high;
    }

    int mid = (low + high) / 2;
    while (low <= high) {
        if (nums[mid] == target) {
            return mid;
        }

        if (nums[mid] < target) {
            low = mid + 1;
            mid = (low + high) / 2;
        } else {
            high = mid - 1;
            mid = (low + high) / 2;
        }
    }
    return low;
}

Review 阅读并点评至少一篇英文文章

Spring Cloud Consul (https://cloud.spring.io/spring-cloud-static/spring-cloud-consul/2.1.0.RELEASE/single/spring-cloud-consul.html#_how_to_activate)

今天这个,看标题想必大家都已经知道,这是微服务中的注册中心。因为eureka在2.x版本之后停止更新了,小编最近又在学习微服务。把eureka学会了,但是还是想挑战下这个consul,毕竟小编的项目是新项目,可以做各种尝试,而不怕。

但是因为consul资料不多,所以很多时候,需要自己寻找资料。这篇文中的consul就描述的挺好的,而且基本上我也能看懂,适合大部分开发人员掌握。consul在微服务中的地位会越来越高,随着像我这种新人的加入,以及后续的发展来说,掌握这个技能是刻不容缓

想学习微服务的可以了解下哦。最近入了微服务的坑,真的是酸爽,把我所有的休息时间都占据了,但能学到快乐,这才是最重要的。小编当初可以很抗拒学技术,现在不一样了,当乐趣在写程序,心态不同,角度就不同,写程序的你,体会到了吗?如果你还没转换这个角色,那请你赶紧转换过来,愉快的编程才是最好的方式。

Tip 一个技术技巧

继续分享《Java核心技术36讲》做的学习笔记,对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?这篇是《Java核心技术36讲》的最后一篇分享了,后面还有两个,个人觉得适合自行消化,所以就不分享啦。我们回头换一个技术栈。

典型回答 单独从性能角度,Netty在基础的NIO等类库之上进行了很多改进,例如:

  • 更加优雅的Reactor模式实现、灵活的线程模型、利用EventLoop等创新性的机制,可以非常高效地管理成百上千的Channel
  • 充分利用Java的Zero-Copy机制,并且从多角度,“斤斤计较”般的降低内存分配和回收的开销。例如,使用池化的DirectBuffer等技术,在提高IO性能的同时,减少了对象的创创建和销毁;利用反射等技术直接操纵SelectionKey,使用数组而不是Java容器等
  • 使用更多本地代码。例如直接利用JNI调用Open SSL等方式,获得比Java内建SSL引擎更好的性能
  • 在通信协议、序列化等其他角度的优化

知识扩展 按照官方定义,它是一个异步的、基于时间Client/Server的网络框架,目标是提供一种简单、快速构建网络应用的方式,同时保证高吞吐量、低延时、高可靠性。

考点:

  1. Reactor模式和Netty线程模型
  2. Pipelining、EventLoop 等部分的设计实现细节
  3. Netty的内存管理机制、引用计数等特别手段
  4. 有的时候面试官也喜欢对比Java标准NIO API,例如,你是否知道Java NIO早期版本中的Epoll空转问题,以及Netty的解决方式等。

Netty的线程模型是什么样的?

Netty采用Reactor线程模型。这里面主要有三种Reactor线程模型。分别是单线程模式、主从Reactor模式、多Reactor线程模式。其都可以通过初试和EventLoopGroup进行设置。其主要区别在于,单Reactor模式就是一个线程,既进程处理连接,也处理IO。类似于我们传统的OIO编程。主从Reactor模式,其实就是将监听连接和处理IO的分开在不同的线程完成。最后,主从Reactor线程模型,为了解决多Reactor模型下单一线程性能不足的问题。改为了一组线程池进行处理。官方默认的是采用这种主从Reactor模型。其线程数默认为CPU内核的2倍。

Share 一篇有观点和思考的技术文章

这次还是沉浸在设计模式的世界中,继续前行了。

公众号地址: 设计模式之工厂模式(一)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑吧攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
  • Share 一篇有观点和思考的技术文章
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档