REWINE NOTE Informatik verbindet dich und mich.

Haskell 常用函数笔记

运算符函数

(!!) 取第n个元素
Prelude> :t (!!)
(!!) :: [a] -> Int -> a

Prelude> [0,1,2,3,4]!!3
3
Prelude> [0,1,2,3,4]!!0
0
乘方 (^), (^^),(**)
Prelude> :t (^)
(^) :: (Integral b, Num a) => a -> b -> a
Prelude> 54.5^5
4.8081998590625e8

Prelude> :t (^^)
(^^) :: (Fractional a, Integral b) => a -> b -> a
Prelude> 5.6^^6
30840.979455999986

Prelude> :t (**)
(**) :: Floating a => a -> a -> a
Prelude> 0.2**0.1
0.8513399225207846

软件工程知识点总结

第1章 软件与软件工程的概念

了解与软件相关的基本概念,包括软件、程序、数据、文档。

软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。

  • 软件 = 程序+数据+文档

程序是按事先设计的功能和性能要求执行的指令序列。

  • 程序 = 数据结构+算法

数据是使程序能正常操纵信息的数据结构。 文档是与程序开发,维护和使用有关的图文材料。

整理一下图灵奖得主们都干了什么

前不久,2020图灵奖今日出炉,龙书作者 Alfred Vaino Aho 和 Jeffrey David Ullman 获奖,作为计算机界的最高荣誉,图灵奖获得者及其成果对计算机学科意义非凡,以前只是大概知道几个人,今天,特地翻了翻维基,看看得奖的都有谁。

使用c++解决leetcode多线程题题目(之一)semaphore

通过 man sem_init 可以查看具体文档。 或者使用: https://man7.org/linux/man-pages/man3/sem_init.3.html

sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。pshared 参数指明信号量是由进程内共享,还是由进程之间共享。如果 pshared 的值为 0,那么信号量将被进程内的线程共享。value 参数指定的初始值。

sem_post是给信号量的值加上一个“1”,它是一个“原子操作”---即同时对同一个信号量做加“1”操作的两个线程是不会冲突的。

sem_wait是一个函数,也是一个原子操作,它的作用是从信号量的值减去一个“1”,但它永远会先等待该信号量为一个非零值才开始做减法。也就是说,如果你对一个值为2的信号量调用sem_wait(),线程将会继续执行,将信号量的值将减到1。如果对一个值为0的信号量调用sem_wait(),这个函数就会原地等待直到有其它线程增加了这个值使它不再是0为止。

goroutine 的学习之旅

回想起来,我是因为对 goroutine 有兴趣而去了解 Go 的,因为 finger tree 而想学 Haskell,结果坑留了半年了(另一个坑留了快3年,Monad 还没弄明白),今天有时间先填上一个再说。

goroutine,Go 语言的协程,是一种比线程更轻量的存在,一个cpu可以支持上万的协程。Go 可以通过 goroutine 支持并发。

Go使用的是并发模型中的 CSP 模型,Communicating Sequential Processes,译为通信顺序进程、七周七并发第六章内容,这本书继续留坑有空再看。

我的全平台软件清单

linux

  • oh-my-zsh 漂亮好用的 shell

  • alacritty 终端模拟器

  • htop 交互式的进程浏览器,可以用来替换Linux下的top命令

  • ranger 终端文件管理器

  • ncdu/filelight 查看磁盘目录占用空间

  • wps/Liberoffice 办公软件,Liberoffice Draw可以画流程图

关于蓝桥杯等算法竞赛的经验总结

1.准备蓝桥杯需要做什么,有哪些需要学习的算法?

熟悉比赛环境

比赛使用的编辑环境,c/c++ 组使用的是 dev-c++ , python 组使用 IDLE , java 组使用 Eclipse,建议平时练习多使用对应的编辑器,如果不熟悉编译环境,在比赛时可能会带来不必要的麻烦,尤其是 python 组的 IDLE 非常简陋,由俭入奢易,由奢入俭难。

喜讯:官方通知第十二届蓝桥杯 c/c++ 组增加了 CodeBlocks 20.03 编程环境,支持 C++ 98 和 C++11, 终于可以用上 c++ 的新特性了。

搭建个人博客记录(github action+hugo)

前言

高中时,作为OIer经常需要看别人的题解博客,那时候luogu还没流行,大家都在tyvj,vijos上刷题,看题解还要找 csdn,博客园,和一些大佬(比如hzwer)的个人博客。慢慢的,就萌生出了自己写博客的想法,一开始,我在蚂蚁笔记上写题解,它可以把markdown笔记分享到蚂蚁博客上,而且主题也很美观,后来它收费了,学生党没有钱(那时候我没手机,没手机号,更别说网银了)弃用了,现在我不推荐大家用了,这个项目2,3年没人维护,恐怕不靠谱。

我还试过WordPress,用的免费主机(当然现在挂了,资料也丢了)

以前在同学帮助下搭建了 hexo+github 的 blog,不过我嫌主题不好看万年不更新。

csdn 的blog因为要绑定手机号,高中没机会用,大一才开始写一些东西。

博客园 后台太丑,不喜欢用这个写。

gridea 这个是我去年了解的,看上去挺方便的,我没试过,感兴趣的可以看看。

现代密码学复习总结

第一章 引言

什么是被动攻击和主动攻击,各有几种类型?

  • 被动攻击:也称窃听,以获取信息为目的。 仅攻击信息的保密性,不影响正常的网络通信,不对消息作任何修改 搭线窃听、对文件或程序非法复制、木马、对资源的非授权使用 被动攻击又分为两类:获取消息的内容和业务流分析

    • 获取消息的内容:通过破译密文等手段直接获取机密信息的内容
    • 业务流分析:敌手虽然可能无法从截获的消息中获取内容,但却有可能获知消息的长度,格式,通信双方的位置和身份,通信次数。在商业环境,用户隐私,以及军网中这些消息可能是敏感的。
  • 主动攻击:对数据流进行篡改或产生假的数据流 可分为3类:

    • 中断:对系统可用性进行攻击 破坏计算机硬件,网络,或文件管理系统。如DoS,病毒等
    • 篡改:对完整性进行攻击 修改文件中的数据(数据修改后存储),替换某一程序使其执行不同功能 修改网络中传送消息的内容等,比如中间节点对转发的图象进行了压缩
    • 伪造:对真实性进行攻击 在网络中插入伪造的消息冒充消息发送者,在文件中插入伪造记录等

初步认识c++1x的新特性

(1) nullptr

nullptr 代替NULL,

NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0

void foo(char *);
void foo(int);

对于这两个函数,如果NULL定义为0的话,foo(NULL)将会出现歧义

使用NULL的情景均可用 nullptr 代替

(2) constexpr

constexpr 让用户显式的声明函数或对象构造函数在编译器为常数

constexpr 的函数可以使用递归,从 C++ 14 开始, constexpr 函数可以在内部使用局部变量、循环和分支等简单语句,但 C++ 11 中是不可以的