获得徽章 0
- #挑战每日一条沸点#
day31
当我们确定了在不同节点上需要分布式锁,那么我们需要了解分布式锁到底应该有哪些特点:
互斥性:和我们本地锁一样互斥性是最基本,但是分布式锁需要保证在不同节点的不同线程的互斥。
可重入性:同一个节点上的同一个线程如果获取了锁之后那么也可以再次获取这个锁。
锁超时:和本地锁一样支持锁超时,防止死锁。
高效,高可用:加锁和解锁需要高效,同时也需要保证高可用防止分布式锁失效,可以增加降级。
支持阻塞和非阻塞:和ReentrantLock一样支持lock和trylock以及tryLock(long timeOut)。
支持公平锁和非公平锁(可选):公平锁的意思是按照请求加锁的顺序获得锁,非公平锁就相反是无序的。这个一般来说实现的比较少。展开评论1 - #挑战每日一条沸点#
day04
使用 Go 语言的小伙伴们应该也对 Go语言官网 被墙感到苦恼,很多文档和第三方包还得通过一些第三方渠道获得;尤其是 golang.org/x 使用广泛,但是被墙了。。。
Go 在 1.11 版本中放出了 mod 管理机制展开评论1 - #挑战每日一条沸点#
day05
go新的包管理模式:
自动下载依赖包
项目不必放在GOPATH/src内了
项目内会生成一个go.mod文件,列出包依赖
所以来的第三方包会准确的指定版本号
对于已经转移的包,可以用replace 申明替换,不需要改代码展开评论1 - #每天一个知识点#
day15
函数式编程
函数式编程是一种编程范式,它将计算过程看作是一系列函数的组合。函数式编程中的函数不同于面向对象编程中的方法,它们没有副作用,只根据输入参数计算输出结果,不改变外部环境的状态。
函数式编程的特点包括:
纯函数:一个函数的输出仅仅取决于输入,而不依赖于外部环境的状态。纯函数不会改变程序的状态,也不会产生副作用,因此易于测试和推理,可以被高效地并行执行。
高阶函数:函数可以作为参数传递给其他函数,也可以作为返回值返回。这种特性可以方便地实现函数的组合和复用,使代码更加简洁。
不可变性:函数式编程中的数据结构是不可变的,即一旦创建就不能被修改。这种特性可以避免并发编程中的竞态条件,也可以提高代码的可靠性和可读性。
函数式编程的优点包括:
可读性高:函数式编程中的代码通常比较简洁,可以用一些高阶函数来组合和构建更加复杂的计算过程。这样可以降低代码的复杂度,提高代码的可读性。
易于测试:由于函数式编程中的函数没有副作用,因此可以很容易地编写单元测试和集成测试。测试用例只需要提供输入参数,验证输出结果是否符合预期即可。
并行执行:函数式编程中的代码可以很容易地并行执行,因为函数之间没有依赖关系,可以独立计算。这种特性可以提高程序的性能和可扩展性。
常见的函数式编程语言包括Haskell、Scala、Clojure等。展开评论1 - #每天一个知识点#
day04HTTP协议和http1、2、3 各版本发展与异同
HTTP/1.0
HTTP/1.0是第一个正式发布的HTTP协议版本。它使用了请求-响应模型,即客户端发出一个HTTP请求,服务器返回一个HTTP响应。HTTP/1.0的请求和响应都是明文的,没有加密保护,容易被窃听和篡改。HTTP/1.0也没有支持持久连接,每次请求都需要重新建立连接,导致了很多不必要的网络延迟和资源浪费。
HTTP/1.1
为了解决HTTP/1.0的一些问题,HTTP/1.1版本被开发出来。HTTP/1.1增加了很多新特性,包括:
持久连接:HTTP/1.1支持在一个TCP连接上传输多个HTTP请求和响应,避免了建立和关闭多个连接带来的延迟和资源浪费。
分块传输编码:HTTP/1.1支持分块传输编码,可以将大文件分成多个块进行传输,提高了数据传输的效率。
缓存:HTTP/1.1支持缓存机制,可以减少网络传输的数据量,加快了页面加载速度。
HTTP/2
HTTP/2是HTTP/1.1的升级版本,它在HTTP/1.1的基础上进一步优化了网络传输效率。HTTP/2使用了二进制协议,将请求和响应分成多个帧(frame)进行传输,可以在一个TCP连接上同时传输多个请求和响应,避免了传统的序列化请求和响应带来的延迟。此外,HTTP/2还支持头部压缩技术,可以减少头部数据的传输量,提高了数据传输效率。
HTTP/3
HTTP/3是HTTP协议的最新版本,它基于QUIC协议,是一种基于UDP的可靠传输协议。HTTP/3在HTTP/2的基础上进一步提高了网络传输效率和安全性。HTTP/3使用了TLS 1.3协议进行加密保护,可以防止中间人攻击。此外,HTTP/3还支持0-RTT技术,可以减少建立连接的延迟,提高了网络传输效率。展开评论1 - #每天一个知识点#
day05
网络安全三要素总结机密性
机密性是指确保信息只能被授权的人员访问和使用,防止未授权的访问和窃取。机密性的实现需要采用加密技术和访问控制技术。加密技术通过对数据进行加密来保证数据的机密性,防止数据泄露。访问控制技术则通过控制用户的访问权限,确保只有授权的用户才能访问受保护的信息。
例如,当我们在网上进行银行转账时,银行会要求我们输入用户名和密码。这是一种访问控制技术,确保只有授权的用户才能访问自己的银行账户。另外,在传输数据时,我们也可以使用SSL/TLS等协议对数据进行加密,确保数据传输过程中的机密性。
完整性
完整性是指信息不受非法修改、删除或篡改的保护。信息的完整性保护是指防止未经授权的个人或者恶意程序对信息进行篡改或破坏,从而保证信息的准确性和真实性。
完整性保护可以通过数据签名、数据加密等技术手段实现。数据签名是指将数据和数据的摘要(即数据的指纹)一起使用私钥加密生成签名,用公钥进行验证签名的过程。数据签名可以保证信息不被篡改,验证签名时如果数据发生了变化,签名也会发生变化,从而保证了信息的完整性。数据加密则是指将信息使用密码学算法加密,只有拥有密钥的人才能解密并获得信息,从而保证信息的机密性和完整性。
例如,一个银行在进行账户余额查询时,需要保证用户的账户余额信息不会被篡改或破坏。银行可以采用数据签名技术,将用户的账户余额信息进行数据签名,并且将签名结果与查询结果一同返回给用户。在返回结果后,用户可以使用公钥验证签名,如果签名正确,则说明查询结果未被篡改,从而保证了信息的完整性。
在互联网应用中,如电子商务、在线支付等领域,完整性保护也非常重要。在这些应用中,数据的完整性保护可以防止黑客攻击,保证信息的真实性和有效性。
身份验证
身份验证是指确认用户的身份,确保只有合法的用户才能访问受保护的资源。身份验证可以通过密码、指纹、虹膜等方式进行。另外,为了增强身份验证的安全性,我们也可以采用多因素认证,如密码加指纹、短信验证码等方式进行身份验证。
在企业内部,为了确保机密信息不被泄露,员工需要进行身份验证才能访问内部的数据和资源。身份验证可以通过账号密码的方式进行,也可以使用智能卡等硬件设备进行身份验证。在进行网络银行等重要操作时,我们也需要进行身份验证,以确保操作的安全性和合法性。展开评论2 - #每天一个知识点#
day01
Go编程中约定和惯例
一、命名规范以及语法惯例
当某个函数需要被外部包调用的时候需要使用大写字母开头,并遵循 Pascal 命名法(驼峰式命名法;否则就遵循驼峰式命名法即第一个单词的首字母小写,其余单词的首字母大写。
单词之间不以空格断开或连接号(-)、底线(_)连接,第一个单词首字母采用大写字母;后续单词的首字母亦用大写字母,例如:irstName、LastName
每一个单词的首字母都采用大写字母的命名格式,被称为“Pascal命名法”,源自于Pascal语言的命名惯例,也有人称之为“大驼峰式命名法”(pper Camel Case,为驼峰式大小写的子集。
当二个或二个以上单词连结在一起时,用驼峰式命名法可以增加变量和函数名称的可读性。
Go 语言追求简洁的代码风格,并通过 gofmt 强制实现风格统一。
左大括号 { 不能单独一行,这是编译器的强制规定,否则你在使用 gofmt 时就会出现错误提示 expected declaration, found ‘{‘ ”右大括号 } 需要单独一行。
二、可见性规则
在Go语言中,标识符必须以一个大写字母开头,这样才可以被外部包的代码所使用,这被称为导出。标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的。但是包名不管在什么情况下都必须小写。
在设计Go语言时,设计者们也希望确保它不是过于以ASCII为中心,这意味着需要从7位ASCII的范围来扩展标识符的空间。 所以Go语言标识符规定必须是Unicode定义的字母或数字,标识符是一个或多个Unicode字母和数字的序列, 标识符中的第一个字符必须是Unicode字母。
这条规则还有另外一个不幸的后果。由于导出的标识符必须以大写字母开头,因此根据定义,从某些语言的字符创建的标识符不能导出。目前唯一的解决方案是使用像“A语言”这样的东西,但这显然不能令人满意。展开评论1 - #每天一个知识点#
day02
简述计算机网络
计算机网络:
计算机网络是指两个或多个计算机通过通信设备和通信媒介互联起来,共享资源和信息的系统。网络的作用是让计算机之间能够相互通信和交换信息。计算机网络包括局域网、广域网和互联网等。互联网是一个全球范围的计算机网络,由许多计算机网络互联而成。
网络分层:
网络分层是指将计算机网络分成若干层次,每层负责不同的功能。网络分层的优势在于各层之间的解耦,这意味着每层只需要关注自己的任务,而不必考虑其他层的具体实现。网络分层的标准是OSI七层模型和TCP/IP四层模型。
OSI七层模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有自己的功能和协议。TCP/IP四层模型包括网络接口层、网络层、传输层和应用层。这些层次的设计和实现可以有效提高网络的可靠性和稳定性。
网络协议:
网络协议是指在计算机网络中进行通信时所使用的规则和标准。网络协议包括传输控制协议(TCP)、网际协议(IP)等。这些协议规定了通信的数据格式、数据传输的方式以及错误处理等细节,保证了计算机网络的可靠性和稳定性。
TCP是一种可靠的传输协议,能够确保数据的正确性和完整性。TCP通过三次握手建立连接,使用滑动窗口协议控制数据的流量。IP是一种网络层协议,负责数据的传输和路由。IP通过将数据包分割成更小的数据包来传输数据,可以在不同的网络之间传输数据。
网络应用:
网络应用是指在计算机网络上实现的各种应用程序。网络应用的种类繁多,包括电子邮件、Web浏览器、即时通讯、视频会议、在线购物等等。网络应用的发展,使得人们可以在网络上进行各种各样的活动,也大大方便了人们的生活和工作。
Web中的网络:
Web是一个基于互联网的超文本系统,可以通过浏览器在互联网上访问各种信息。Web使用了HTTP协议作为数据传输的协议。Web浏览器通过解析HTML和CSS代码来渲染网页内容。Web应用程序可以使用JavaScript等编程语言实现交互式功能。
网络安全:
网络安全问题包括黑客攻击、病毒和恶意软件、数据泄露等等。网络安全需要采取多种措施来保护计算机网络,包括网络防火墙、入侵检测系统、加密技术等等。网络安全意识也非常重要,使用者需要注意密码安全、勿在不可信的网络环境下操作计算机、避免点击可疑链接等等。展开评论2 - #每天一个知识点#
day03HTTP协议通俗说
HTTP协议是Web应用程序和Web服务器之间的通信协议,不断发展和升级以满足不断增长的网络应用案例,展示HTTP协议在实际应用中的作用。以购物网站为例,客户可以通过HTTP协议发送请求,服务器返回HTTP响应,完成用户浏览商品、下订单、付款等操作。
当用户在购物网站浏览商品时,客户端发送HTTP GET请求给服务器,请求服务器返回商品列表信息。服务器收到请求后,查询商品数据库,返回商品信息的HTTP响应给客户端。
当用户选择某个商品并下订单时,客户端发送HTTP POST请求给服务器,请求服务器接受订单信息。服务器收到请求后,将订单信息保存到订单数据库中,并返回订单确认信息的HTTP响应给客户端。
当用户付款时,客户端发送HTTP POST请求给服务器,请求服务器接受付款信息。服务器收到请求后,将付款信息发送到支付网关,等待支付网关返回付款确认信息。一旦收到支付确认信息,服务器将订单状态改为已付款,并返回付款成功信息的HTTP响应给客户端。
可以看到,HTTP协议在购物网站中发挥了非常重要的作用,它负责客户端和服务器之间的通信,实现了网站的各种功能。展开评论1