美文网首页
ARTS 第22周

ARTS 第22周

作者: 陈卧虫 | 来源:发表于2019-11-06 15:43 被阅读0次

    ARTS 第22周分享

    [TOC]

    Algorithm

    274. H-Index

    [medium]
    [题目描述]

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.

    According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."

    Example 1:
    Input: citations = [3,0,6,1,5]
    Output: 3 
    Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had 
                 received 3, 0, 6, 1, 5 citations respectively. 
                 Since the researcher has 3 papers with at least 3 citations each and the remaining 
                 two with no more than 3 citations each, her h-index is 3.
    
    [解题思路]
    • 先将论文根据引用次数从大到小排序
    • 找到引用次数
    [参考代码]
    type myInts []int
    
    func (is myInts) Len() int {
        return len(is)
    }
    
    func (is myInts) Less(i, j int) bool {
        return is[i] > is[j]
    }
    
    func (is myInts) Swap(i, j int) {
        is[i], is[j] = is[j], is[i]
    }
    
    func HIndex(ci []int) int {
        return hIndex(ci)
    }
    
    func hIndex(citations []int) int {
        /*
            // 先对数组进行从大到小排序,
            // 根据index指数的特点,找到最大的索引+1等于本身值的这个值即可
        */
    
        // 先对数组进行从大到小排序,
        var c myInts
        c = citations
        sort.Sort(c)
        var max int
        if c.Len() >= 1 {
            if c[0] > 0 {
                max = 1
            }
        }
        for i := 0; i < c.Len(); i++ {
            if c[i] >= i+1 {
                max = i+1
            } else {
                return max
            }
    
        }
        return max
    }
    

    Review

    Learning to Use Go Reflection: https://medium.com/capital-one-tech/learning-to-use-go-reflection-822a0aed74b7

    golang reflect的基本使用方法,以及局限性

    Tips

    golang类型别名

    • 类型别名和原类型完全一样,只不过是另一种叫法而已
    • 可以为任意的类型定义类型别名,语言规范中没有限制,可以为数组、结构体、指针、函数、接口、Slice、Map、Channel定义别名,甚至你还可以为通过类型定义(type definition)的类型定义别名,更甚者是你可以为别名定义别名。
    • 完全一样(identical types)意味着这两种类型的数据可以互相赋值,而类型定义要和原始类型赋值的时候需要类型转换(Conversion T(x))。
    • 类型别名和类型定义最大的区别在于:类型别名和原类型是相同的,而类型定义和原类型是不同的两个类型
      • 既然类型别名和原类型是相同的,那么在`switch - type中,你不能将原类型和类型别名作为两个分支,因为这是重复的case
      • 如果定义的类型别名是exported (首字母大写)的,那么别的包中就可以使用,它和原始类型是否可exported没关系 --> (用于将不可导出类型变成可导出类型)
      • 既然类型别名和原始类型是相同的,那么它们的方法集也是相同的
    • 在Go 1.9中, 内部其实使用了类型别名的特性。 比如内建的byte类型,其实是uint8的类型别名,而rune其实是int32的类型别名

    share

    做技术最怕埋头苦干:https://mp.weixin.qq.com/s/dV3Zu2tVV1bP7QwHomTBwQ

    • 在职场应该发展自身的:自我表现和不可替代性

      自我表现是要证明自己,让公司发现自己的价值

      如果价值特别大,大到其他人不好替代,那这样一来,自我表现的本质还是为了不可替代性。

    • 首先要到公司的核心业务中去

    • 积极在团队内部做分享,去研究一些有价值的技术,或者发表下自己对当前业务的思考,这些都可以为你贴上一些标签:

      “这个人看起来技术不错的样子”
      “这个人看起来对业务理解很深的样子”
      “这个人看起来很有工作激情”

    • 多担责,也可以提高自己的不可替代性,

      在公司的协作开发中,一般都是每个人负责自己的一个模块,大家都不愿意去管其他模块的事情。但其实对于一个有追求的人来说,确实要多担责,因为这样一来就可以对业务有更全局的了解,就能够发掘别人看不到的闪光点,久而久之,就可以成长为团队里的业务能手,遇到问题时只有你最清楚,那大家对你的印象就会不错,一提到你,就联想到业务能手这个标签。

    • 人一定要有一些正向的特点,能够让周围人对你留下深刻印象,人最怕默默无闻,默默无闻的后果就是好事轮不到,坏事跑不了。人一旦有一些标签后,那就有了一定的不可替代性

    • 我个人觉得哈,人一定要曝光自己,一定要创造一些机会来站在舞台上展示自己。

    • 如果这一年来,你从来都是默默无闻地写代码,工作平淡无奇,没有一丝涟漪,也没有任何高光时刻,那就可以反思下了

    webSocket 介绍: https://mp.weixin.qq.com/s/gasQHCRj5RutsBe0zbSTFg

    • WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

    • 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

    • 提供一个主动通达客户端的能力,通过一种方式实现,多种不同平台(H5/Android/IOS)去使用

    • webSocket建立过程:

      • 客户端发起升级协议的请求,采用标准的HTTP报文格式,在报文中添加头部信息
      Connection:Upgrade表明连接需要升级
      
      Upgrade:websocket需要升级到 websocket协议
      
      Sec-WebSocket-Version:13 协议的版本为13
      
      Sec-WebSocket-Key:I6qjdEaqYljv3+9x+GrhqA== 这个是base64 encode 的值,是浏览器随机生成的,与服务器响应的 Sec-WebSocket-Accept对应
      
      
      • 服务器响应升级协议

      服务端接收到升级协议的请求,如果服务端支持升级协议会做如下响应

      返回:

      StatusCode:101SwitchingProtocols 表示支持切换协议

      • 升级协议完成以后,客户端和服务器就可以相互发送数据
    • websocket是双向的数据通讯,可以连续发送,如果发送的数据需要服务端回复,就需要一个seq来确定服务端的响应是回复哪一次的请求数据

    本周阅读

    第四周:1, 5, 7
    Go Modules踩坑总结: https://mp.weixin.qq.com/s/2v8kGm8T9BQFmpLfQE7-wg
    数据库用数值保存时间戳: https://mp.weixin.qq.com/s/2B1VwPn9u6U-GHwWspXj6A
    我是如何通过开源项目月入 10 万的?: https://mp.weixin.qq.com/s/Pif-0wJao54Bf5qqRTFVIQ
    
    Nginx 所使用的 epoll 模型是什么  https://mp.weixin.qq.com/s/VzxtmZ3sMiW3ClW5fxrb6g
    
    低效程序员的5个坏习惯: https://mp.weixin.qq.com/s/hM6jY-9v_skXKGF5Y38mtA
    做技术最怕埋头苦干: https://mp.weixin.qq.com/s/dV3Zu2tVV1bP7QwHomTBwQ
    

    相关文章

      网友评论

          本文标题:ARTS 第22周

          本文链接:https://www.haomeiwen.com/subject/dsjfyctx.html