网站点击量怎么看/电商怎么做新手入门
练习4.1
编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。)
func PopCount(ptr *[32]byte) int {var res intfor i := 0; i < 32; i++ {x := int(ptr[i])for x != 0 {res += x & 1x >>= 1}}return res
}
练习4.2
编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。
package mainimport ("bufio""crypto/sha256" //!+"crypto/sha512""flag""fmt""os"
)var n = flag.Int("n", 256, "SHA param")func main() {flag.Parse()var s stringinput := bufio.NewScanner(os.Stdin)for input.Scan() {s += input.Text()}switch *n {case 256:fmt.Printf("%x", sha256.Sum256([]byte(s)))case 384:fmt.Printf("%x", sha512.Sum384([]byte(s)))case 512:fmt.Printf("%x", sha512.Sum512([]byte(s)))}
}
练习4.3
重写reverse函数,使用数组指针代替slice。
func reverse(s *[6]int) {for i, j := 0, len(*s)-1; i < j; i, j = i+1, j-1 {s[i], s[j] = s[j], s[i]}
}
练习4.4
编写一个rotate函数,通过一次循环完成旋转。
func rotate(s []int, ind int) {out := make([]int, cap(s)-ind)copy(out, s[ind:])for i := 0; i < ind; i++ {out = append(out, s[i])}copy(s, out)
}
练习4.5
写一个函数在原地完成消除[]string中相邻重复的字符串的操作。
func nonrepeat(strings []string) []string {i := 0for j := range strings {if j != 0 && strings[j] == strings[j-1] {continue} else {strings[i] = strings[j]i++}}return strings[:i]
}
练习4.6
编写一个函数,原地将一个UTF-8编码的[]byte类型的slice中相邻的空格(参考unicode.IsSpace)替换成一个空格返回
func nonrepeat(s []byte) []byte {for j := 0; j < len(s); j++ {if j != 0 && unicode.IsSpace(rune(s[j])) && s[j] == s[j-1] {copy(s[j-1:], s[j:])s = s[:len(s)-1]j--}}return s
}
练习4.7
修改reverse函数用于原地反转UTF-8编码的[]byte。是否可以不用分配额外的内存?
不能不分配额外的内存,byte需要转为rune,否则会出现乱码
func reverse(s []byte) []rune {r := []rune(string(s))for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {r[i], r[j] = r[j], r[i]}return r
}
练习4.8
修改charcount程序,使用unicode.IsLetter等相关的函数,统计字母、数字等Unicode中不同的字符类别。
package mainimport ("bufio""fmt""io""os""unicode""unicode/utf8"
)func main() {counts := make(map[rune]int) // counts of Unicode charactersvar utflen [utf8.UTFMax + 1]int // count of lengths of UTF-8 encodingsinvalid := 0 // count of invalid UTF-8 charactersvar utftype [3]intin := bufio.NewReader(os.Stdin)for {r, n, err := in.ReadRune() // returns rune, nbytes, errorif err == io.EOF {break}if err != nil {fmt.Fprintf(os.Stderr, "charcount: %v\n", err)os.Exit(1)}if r == unicode.ReplacementChar && n == 1 {invalid++continue}switch {case unicode.IsLetter(r):utftype[0]++case unicode.IsDigit(r):utftype[1]++default:utftype[2]++}counts[r]++utflen[n]++}fmt.Printf("rune\tcount\n")for c, n := range counts {fmt.Printf("%q\t%d\n", c, n)}fmt.Print("\nlen\tcount\n")for i, n := range utflen {if i > 0 {fmt.Printf("%d\t%d\n", i, n)}}fmt.Print("\ntype\tcount\n")for i, n := range utftype {switch i {case 0:fmt.Print("letter:")case 1:fmt.Print("digit:")case 2:fmt.Print("other:")}fmt.Println(n)}if invalid > 0 {fmt.Printf("\n%d invalid UTF-8 characters\n", invalid)}
}
练习4.9
编写一个程序wordfreq程序,报告输入文本中每个单词出现的频率。在第一次调用Scan前先调用input.Split(bufio.ScanWords)函数,这样可以按单词而不是按行输入。
func wordfreq() {counts := make(map[string]int)in := bufio.NewScanner(os.Stdin)in.Split(bufio.ScanWords)for in.Scan() {counts[in.Text()]++}for k, v := range counts {fmt.Println("%s %d\n", k, v)}
}
练习4.10
修改issues程序,根据问题的时间进行分类,比如不到一个月的、不到一年的、超过一年。
package mainimport ("fmt""log""os""time""gopl.io/ch4/github"
)func main() {//now 为现在的时间,yearAgo 为距现在一年的时间,monthAgo 为距现在一月的时间。now := time.Now()yearAgo := now.AddDate(-1, 0, 0)monthAgo := now.AddDate(0, -1, 0)//三个切片,用来存储 不足一个月的问题,不足一年的问题,超过一年的问题。yearAgos := make([]*github.Issue, 0)monthAgos := make([]*github.Issue, 0)noMonthAgos := make([]*github.Issue, 0)result, err := github.SearchIssues(os.Args[1:])if err != nil {log.Fatal(err)}fmt.Printf("%d issues:\n", result.TotalCount)for _, item := range result.Items {if yearAgo.After(item.CreatedAt) {yearAgos = append(yearAgos, item)} else if monthAgo.After(item.CreatedAt) {monthAgos = append(monthAgos, item)} else if monthAgo.Before(item.CreatedAt) {noMonthAgos = append(noMonthAgos, item)}}fmt.Printf("\n一年前\n")for _, item := range yearAgos {fmt.Printf("#%-5d %9.9s %.55s\n",item.Number, item.User.Login, item.Title)}fmt.Printf("\n一月前\n")for _, item := range monthAgos {fmt.Printf("#%-5d %9.9s %.55s\n",item.Number, item.User.Login, item.Title)}fmt.Printf("\n不足一月\n")for _, item := range noMonthAgos {fmt.Printf("#%-5d %9.9s %.55s\n",item.Number, item.User.Login, item.Title)}
}
相关文章:

GO语言圣经 第四章习题
练习4.1 编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。) func PopCount(ptr *[32]byte) int {var res intfor i : 0; i < 32; i {x : int(ptr[i])for x ! 0 {res x & 1x >> 1}}return res }练习4.2 编…...

远程连接Ubuntu 22.04
远程连接Ubuntu 22.04 安装openssh-server sudo apt install openssh-server检查服务运行状态 systemctl status sshd重启服务状态 sudo systemctl restart ssh开启防火墙 sudo ufw enable开启ssh传输端口 sudo ufw allow ssh设置开机启动服务 sudo systemctl enable ssh配置服…...

字节前端实习的两道算法题,看看强度如何
最长严格递增子序列 题目描述 给你一个整数数组nums,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7…...

设计模式—策略模式
目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西? 2、类和实例 什么是类? 什么是实例? 什么是实例化? 3、字段和属性 什么是字段? 属性是什么࿱…...

LPDDR4、DDR4
核心信息: 2400Mbps(每秒传输2400*1百万bit) 2400MT/s(百万次/秒) 信号...

ESP32C3 LuatOS RC522①写入数据并读取M1卡
LuatOS RC522官方示例 官方示例没有针对具体开发板,现以ESP32C3开发板为例。 选用的RC522模块 ESP32C3-CORE开发板 注意ESP32C3的 SPI引脚位置,SPI的id2 示例代码 -- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "helloworld" VERSIO…...

MusicBrainz Picard for Mac :音乐文件ID3编辑器
MusicBrainz Picard for Mac是一款macOS平台的音乐文件ID3编辑器,能够帮助我们在Mac电脑上编辑音乐文件的ID3标签信息,包括艺人、专辑等信息,非常快速和简单方便。Picard是下一代MusicBrainz标记应用程序。 这个新的标签概念是面向专辑的&…...

❤ Uniapp使用
❤ Uniapp使用 一、介绍 uni-app官网:https://uniapp.dcloud.io/api/media/image?idpreviewimage 微信小程序官网:https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewImage.html 二、使用 1、uniapp 实现图片预览 单图预…...

解密Spring事务生效的内部机制
声明式事务和编程式事务对比: 声明式事务: 使用注解或XML配置的方式,在代码中声明事务的属性和行为。通过AOP和代理模式实现,将事务管理与业务逻辑代码解耦。适用于大多数情况,简化了代码,提高了可维护性和…...

大数据时代下的数据安全防护
随着大数据时代的来临,数据安全防护成为了一个重要的问题。在大数据时代,数据的规模和价值都得到了极大的提升,因此数据安全的重要性也变得越来越突出。本文将从数据加密、访问控制、网络安全和人员管理四个方面来介绍大数据时代下的数据安全…...

RabbitMQ-常用命令
RabbitMQ常用命令 3.1 启动停止rabbitMQ命令 # 前台启动Erlang VM 和 RabbitMQ 当窗口关闭或者ctrlc时,使退出了。 rabbitmq-server# 使用系统命令启动 systemctl start rabbitmq-server# 后台启动 rabbitmq-server -detached# 停止rabbitMQ和Erlang VM rabbitmq-…...

Spring中依赖注入的继承bean的细节问题
介绍 有时我们会对一种类型的bean进行继承,在Spring生成bean的时候,返回类型有时是子类类型,有时会父类类型。那么到底在什么情况下用哪种类型呢?肯定有不少人会忽略这点,本篇文章就是把这个细节讲清楚 案例 父类Ba…...

海外腾讯云服务器手机上无法访问外网怎么办??
本文将介绍腾讯云服务器无法访问外网的一些常见原因以及解决办法,同时解答了手机无法访问腾讯云服务器的问题。 腾讯云服务器(Tencent Cloud Server)是一种基于云计算技术的虚拟服务器,可以满足用户对于计算、存储、网络等方面的需…...

python3+requests:接口自动化测试(二)
前言:上篇文章python3requestsunittest:接口自动化测试(一):已经介绍了基于unittest框架的实现接口自动化,但是也存在一些问题,比如最明显的测试数据和业务没有区分开,接口用例不便于…...

uni-app:允许字符间能自动换行(英文字符、数字等)
<template><view class"container"><!-- 这里是你的文本内容 -->{{ multilineText }}</view> </template><style> .container {word-break: break-all; } </style>例如: <template><view class"…...

day 42 |● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II
121. 买卖股票的最佳时机 dp数组需要记录两种状态,一种是当天时手中还持有股票,一种是当天时手中已卖出股票。 func maxProfit(prices []int) int {dp : make([][]int, len(prices))dp[0] []int{-prices[0], 0}for i : 1; i < len(prices); i{val0…...

SQLserver基础入门理论(超基础)
♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏…...

(三)行为模式:7、观察者模式(Observer Pattern)(C++示例)
目录 1、观察者模式(Observer Pattern)含义 2、观察者模式的UML图学习 3、观察者模式的应用场景 4、观察者模式的优缺点 (1)优点: (2)缺点 5、C实现观察者模式的实例 1、观察者模式&…...

2019CVPR Semantic Graph Convolutional Networks for 3D Human Pose Regression
基于语义图卷积网络的三维人体姿态回归 源码 https://github.com/garyzhao/SemGCN 摘要 在本文中,我们研究了学习图卷积网络(GCN)回归的问题。GCN的当前体系结构受限于卷积滤波器和共享的变换矩阵为的小感受野。为了解决这些限制ÿ…...

大数据课程K16——Spark的梯度下降法
文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的梯度下降法; ⚪ 了解Spark的梯度下降法家族(BGD,SGD,MBGD); ⚪ 掌握Spark的MLlib实现…...

springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!
本文转载自:springboot:时间格式化的5种方法(解决后端传给前端的时间显示不一致)_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 时间问题演示 为了方便演示,我写了一个简单 Spring Boot 项目ÿ…...

六、vim编辑器的使用
1、编辑器 (1)编辑器就是一款软件。 (2)作用就是用来编辑文件,譬如编辑文字、编写代码。 (3)Windows中常用的编辑器,有自带的有记事本(notepad),比较好用的notepad、VSCode等。 (4)Linux中常用的编辑器,自带的最古老的vi&…...

【易售小程序项目】项目介绍与系列文章集合
项目介绍 易售二手小程序主要用于校园中二手商品的交易,该系列文章会记录这个小程序前端的整个开发过程并提供详细代码,后台主要基于若依管理系统搭建,文章中也会提及后端关键部分的实现及代码。希望该系列文章可以帮助小白了解项目的开发流…...

游戏服务器成DDoS最大攻击重灾区
游戏产业的迅猛发展也让游戏产业成为被黑客攻击的重灾区。什么原因让游戏行业成为DDoS的攻击重点。总结有如下原因和主要手段: 1.游戏行业的攻击成本较低,攻防成本1:N。随着DDoS攻击的打法越来越复杂,攻击点更是越来越多ÿ…...

[SpringBoot3]博客管理系统(源码放评论区了)
八、博客管理系统 创建新的SpringBoot项目,综合运用以上知识点,做一个文章管理的后台应用。依赖: Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求:文章管理工作,发布新文章&…...

C语言——指针基本语法
概述 内存地址 在计算机内存中,每个存储单元都有一个唯一的地址(内存编号)。 通俗理解,内存就是房间,地址就是门牌号 指针和指针变量 指针(Pointer)是一种特殊的变量类型,它用于存储内存地址。 指针的实…...

elementui table 在浏览器分辨率变化的时候界面异常
异常点: 界面显示不完整,表格卡顿,界面已经刷新完成,但是表格的宽度还在一点一点变化,甚至有无线延伸的情况 思路: 1. 使用doLayout 这里官方文档有说明, 所以我的想法是,监听浏览…...

六、Kafka-Eagle监控
目录 6.1 MySQL 环境准备6.2 Kafka 环境准备6.3 Kafka-Eagle 安装 6.1 MySQL 环境准备 Kafka-Eagle 的安装依赖于 MySQL,MySQL 主要用来存储可视化展示的数据 6.2 Kafka 环境准备 修改/opt/module/kafka/bin/kafka-server-start.sh 命令 vim bin/kafka-server-sta…...

DBeaver 23.1.5 发布
导读DBeaver 是一个免费开源的通用数据库工具,适用于开发人员和数据库管理员。DBeaver 23.1.5 现已发布,更新内容如下. Data editor 重新设计了词典查看器面板 UI 空间数据类型:曲线几何线性化已修复 数据保存时结果选项卡关闭的问题已解决…...

三种垃圾收集算法,优缺点分析,设计垃圾收集
文章目录 垃圾收集算法标记-清除(基础收集算法)标记-复制(新生代)标记-整理(老年代) 垃圾收集算法 标记-清除(基础收集算法) 首先标记出所有需要回收的对象,在标记完成后…...