ARTS 第22周

· · 1010 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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周

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1010 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传