Giter Club home page Giter Club logo

cs-notes's Introduction


算法  操作系统 网络  面向对象  数据库    Java   系统设计   工具   编码实践   后记  
✏️ 💻 ☁️ 🎨 💾 💡 🔧 🍉 📝


✏️ 算法

💻 操作系统

☁️ 网络

💾 数据库

☕ Java

💡 系统设计

🎨 面向对象

🔧 工具

🍉 编码实践

📝 后记

排版

笔记内容按照 中文文案排版指北 进行排版,以保证内容的可读性。

不使用 ![]() 这种方式来引用图片,而是用 <img> 标签。一方面是为了能够控制图片以合适的大小显示,另一方面是因为 GFM 不支持 <center> ![]() </center> 这种方法让图片居中显示,只能使用 <div align="center"> <img src=""/> </div> 达到居中的效果。

在线排版工具:Text-Typesetting

License

本仓库的内容不是将网上的资料随意拼凑而来,除了少部分引用书上和技术文档的原文(这部分内容都在末尾的参考链接中加了出处),其余都是我的原创。在您引用本仓库内容或者对内容进行修改演绎时,请署名并以相同方式共享,谢谢。

转载文章请在开头明显处标明该页面地址,公众号等其它转载请联系 [email protected]

Logo:logomakr

知识共享许可协议

致谢

感谢以下人员对本仓库做出的贡献,当然不仅仅只有这些贡献者,这里就不一一列举了。如果你希望被添加到这个名单中,并且提交过 Issue 或者 PR,请与我联系。

cs-notes's People

Contributors

0xkookoo avatar crossoverjie avatar cyc2018 avatar fanofxiaofeng avatar hustcoderhu avatar imhuster avatar jiahaochang avatar kwongtailau avatar linehk avatar linkcoder avatar linkwk7 avatar linw7 avatar luocaodan avatar machinechen avatar moqimoqidea avatar nopainanymore avatar onefansofworld avatar peiel avatar pualrdwade avatar qizhengzhong11 avatar seventheluck avatar silverados avatar somone23412 avatar xbhoneybee avatar xiangflight avatar xiangmingzhe0928 avatar xunzhuo avatar yif-hong avatar zhangxuelong10 avatar ziyitony avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cs-notes's Issues

管道描述问题

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1-%E7%AE%A1%E9%81%93

描述中,管道把一个进程的标准输出和另一个进程的标准输入连接在一起

我认为这是有问题的,进程间通信使用管道,但是把一个进程的标准输出和另一个进程的标准输入连接在一起是针对 Unix 终端的用法吧。而不是所有管道都是如此吧,Unix 下一切皆文件,管道也应该是文件。

再说如果所有管道都是标准输入流和标准输出流的对接,那么用户从标准输入流再输入点什么不就乱套了?我任务这种描述有问题。

HTTP 重定向问题

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E5%88%86%E5%B8%83%E5%BC%8F%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90.md#4-http-%E9%87%8D%E5%AE%9A%E5%90%91

重定向怎么可能重定向到 10.xx.xx.xx 这样的保留地址呢?

负载均衡中很多地址用得都有问题,比如 DNS 负载均衡的,客户端怎么可能通过访问 10.xx.xx.xx 这样的保留地址访问到自己需要的服务呢?除非同在一个局域网。

HTTP 重定向做负载均衡,1、需要有一个公网 IP;2、需要暴露服务器到公网

Please translate to english

Can someone please translate this to english. This repo will be a great success in english speaking people

Web 页面请求过程描述有点问题

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md#web-%E9%A1%B5%E9%9D%A2%E8%AF%B7%E6%B1%82%E8%BF%87%E7%A8%8B

web 页面请求过程这是一个挺大的话题。
针对第3点,服务器应该不是随机与分配一个端口与客户端连接吧。
原因:

  1. 端口最多就 2^16个,也就是一个服务器最多只能够同时服务 65536 个客户连接?
  2. 有 IO 复用的情况
  3. 防火墙可能不允许随机端口进出通信

最后一点我也不清楚:如果服务器重新分配一个端口与客户端连接,这样不会引发 TCP 再次握手吗?

这个问题听说在挺多面试中出现过,希望作者能够进一步详细分析,谢谢你的分享。

一则建议

我感觉本文所有对于项目资源的链接(比如超链接,图片等)似乎都是用的绝对路径,这样似乎不太妥。我感觉应该换成相对路径比较好,一来当我们fork项目的时候就可以链接到自己的项目,而来这样也比较方便制作成gitbook。。。

哲学家问题第二个算法依然有死锁问题

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#2-%E5%93%B2%E5%AD%A6%E5%AE%B6%E8%BF%9B%E9%A4%90%E9%97%AE%E9%A2%98

semaphore mutex = 1;

void philosopher(int i) {
    while(TURE){
        think();
        down(mutex);
        down(chopstick[LEFT[i]]);
        down(chopstick[RIGHT[i]]);
        up(mutex);
        eat();
        down(mutex);
        up(chopstick[RIGHT[i]]);
        up(chopstick[LEFT[i]]);
        up(mutex);
    }
}

试想一下 5 个哲学家,假设哲学家1首先执行 down(mutex) 成功,然后把左右筷子都拿着 down(chopstick[0]) down(chopstick[1]) 都拿到手,然后很自信地释放了 up(mutex),开心地吃饭了。
在此期间,哲学家5成功执行了 down(mutex),并且成功地拿到了左边的筷子 down(chopstick[4]),但发现右边筷子被哲学家1用着,无奈又陷入了漫长的思考中。哲学家1吃饱了,觉得应该开始思考人生了,想放下筷子,但是 down(mutex) 一直阻塞。

原因:哲学家5拿着 mutex 不肯放,一直要等到拿到右边的筷子 chopstick[0],但是哲学家1想要让出 chopstick[0],但是先要拿到 mutex。Oops,死锁。

关于异步的解释

异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。

有点懵逼,,,

leetcode整理的不够300吧?

对题目做了一个分类,并对每种题型的解题思路做了总结。已经整理了 300+ 的题目,基本涵盖所有经典题目
-- 这里好像并没有够300+

分布式锁使用场景

原文:

例如一个应用有手机 APP 端和 Web 端,如果在两个客户端同时进行一项操作时,那么就会导致这项操作重复进行。

这样的场景并不一定要使用分布式锁哈。即使存在多个客户端,但如果后端服务仍然是单机也就是单进程的用 Java 内置锁依然可以哦。

你应该想描述的是当后端的应用分布式部署时,比如订单服务有两台 A 和 B。当 APP 的请求路由到了 A 服务,WEB 端被路由到了 B 服务,这时对共享资源进行使用时需要使用分布式锁。

关于参与项目申请

hi~
目前看到了只有java这一块的内容,我可以增加Go&PHP相关内容, 请问要如何参与, 或者遵循什么规范? 方便的可以通过邮箱联系我. 3Q~

[email protected]

哲学家问题应该是活锁

哲学家问题最初由 Dijkstra提出 哲学家就餐问题,当时这个问题确实是用哲学家吃饭来描述的。但是这里不得不说死锁与活锁的区别,死锁不会自行解开,而活锁有可能自行解开,当然理论上如果这个时间是严格相同的,那么这个活锁产生的影响与死锁自然也有很大程度上是相似的。所以哲学家吃饭问题那一块还是需要修正一下。另外,对于这个问题还有一种可行的解决方式就是引入一个调度员,相当于一个服务生或者侍者,当某个哲学家需要吃饭时,就让服务员来调度餐具。

MallarDuck => MallardDuck

Just a small misspelling I noticed when reading through the notes:

public class MallarDuck extends Duck{
    public MallarDuck(){
        flyBehavior = new FlyWithWings();
        quackBehavior = new Quack();
    }
}

Should read:

public class MallardDuck extends Duck{
    public MallardDuck(){
        flyBehavior = new FlyWithWings();
        quackBehavior = new Quack();
    }
}

设计模式.md

贪心算法:投飞镖刺破气球 代码正确,算法描述有误

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3.md#%E8%B4%AA%E5%BF%83%E6%80%9D%E6%83%B3

你的算法描述:
从左往右投飞镖,并且在每次投飞镖时满足以下条件:

  1. 左边已经没有气球了;
    2/ 本次投飞镖能够刺破最多的气球。

你的代码中的算法应该描述为:
在左边的气球先于右边气球破的前提下,保证每次破的气球数量要最大。

如果你有疑问可以用我这个 TestCase 测试你的算法描述:
[[1, 100], [4, 500], [5, 19], [90, 100], [100, 200]]

按照你的文字描述应该先破:[1,100], [4, 500], [90,100], [100,200] 再破 [5,19]

而你的代码中的顺序应该是:[1,100], [4,500], [5,19] 再破 [90, 100], [100, 200]

Leetcode : 198. House Robber (Easy)

是不是应该是
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])

下面这个,没有看太懂呢
dp[i] = max(dp[i - 2], dp[i - 3]) + nums[i]

两处 film 误打为 file

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/HTTP.md#%E8%AE%A4%E8%AF%81

除了拼写错误还有一个问题:
多列索引中的示例 SQL 不好,并没有显示多列索引的优势

SELECT film_id, actor_ id FROM sakila.film_actor
WhERE actor_id = 1 OR film_id = 1;

假如本例中多列索引为:(actor_id, film_id)
B-Tree 中是先按照 actor_id 进行排列,相同的 actor_id 再根据 film_id 进行排列。
本例中使用了 OR 关键字,这样的话导致索引查询中找到 actor_id = 1 此处使用了索引,但是 OR film_id = 1 中并不能使用 (actor_id, film_id) 的索引。

建议例子把 OR 改为 AND :

SELECT film_id, actor_ id, xxx FROM sakila.film_actor
WhERE actor_id = 1 AND film_id = 1;

这样的话,在查询索引中,找到了 actor_id = 1 后可以继续使用索引查询满足 film_id = 1 的数据。

多加 xxx 查询项是像以下查询语句就编程了判断表中有多少满足 actor_id = 1 AND film_id = 1 的数据(通过判断返回的行数可知)。

SELECT film_id, actor_ id FROM sakila.film_actor
WhERE actor_id = 1 AND film_id = 1;

最后提一点

在介绍 MySQL 的存储引擎:MyISAM 和 Innodb 的时候最好提一下他们的应用场景,而他们的引用场景是由其内部实现决定的。

比如:
MyISAM 的索引中叶子结点存储的是数据具体存放的位置,而 Innodb 的非聚簇索引的索引叶子结点存放的是 primary key。这样导致在只读场景 MyISAM 更加快,因为不需要再次查询 B-Tree。

Innodb 的事务是通过 undo、redo 等日志实现的。

BTW,谢谢分享。

转载申请

您好,因为您没有添加开源协议,因此我们希望能够获得授权来转载这篇资源帖,感谢!

Code section needs to be fixed (1 minute fix)

on: notes/代码可读性.md
under: 八,分裂的长期表达
(Eight, split the long expression)

Use Morgan Theorem to simplify some logical expressions:

if(!a && !b) {
...
}
if(a || b) {
...
}

should be:

if(!a && !b) {
...
}
if(!(a || b)) {
...
}

Issue about Interface

Hi, thanks for sharing your notebook.

But the description in Java 基础.md / 抽象类与接口 contains stale info about interface.

Java 8 has enhanced interface. You can implement methods within an interface.

交换机说法有点问题

https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md#%E4%BA%A4%E6%8D%A2%E6%9C%BA%E4%B8%8E%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%E5%8C%BA%E5%88%AB

阐述了交换机在数据链路层工作,那后面为什么说维护这 ip 到 mac 的映射表呢?这不是上文说路由器干的事情吗? 我记得之前老师说过是交换机维护这 mac 地址和交换机插孔的映射吧。

但现代交换机确实具有部分路由器的功能

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.