xzyl的博客

沉淀,分享

0%

历史

今天我们聊的不是”古老”的 JAVA SSH,而是诞生至今已20多年的网络安全协议-SSH。SSH 是 Secure Shell 的简称,是一种使得数据在网络中安全传输的协议。在信息爆炸,信息安全愈发重要的今天,SSH 已无处不在,应用十分广泛,正如其官网描述的:

The SSH (Secure Shell) protocol is used for remote logins, file transfers, and automated systems management. It is used to manage the Internet infrastructure, cloud infrastructure, enterprise IT infrastructure, and remote servers in data centers.

阅读全文 »

今天遇到一件很奇怪的事情。

客户在使用我们的devops平台创建分支时一直提示: Invalid reference name,可是作为reference的master分支是存在的。我们代码管理使用的是CE版的Gitlab,所以我查询问题时想着是不是调用 Gitlab API时传入的参数不对,review代码几次没有发现可疑的地方,在举足无措时想到在Gitlab Web端创建分支。

仍然提示”Invalid reference name”,不过比API好的是显示了分支名:bug/v1.0.1.1-hotfix,不过这跟平台所给的或者Git中的概念不一致,**bug/v1.0.1.1-hotfix应该算是要创建的分支名,master才算是reference。**这里的提示很容易误导。暂时鄙视一下Gitlab,API确实不怎么好用 。

虽然知道了问题出在Gitlab而非devops平台代码,但是也不知道具体原因。
之后再次选择在本地clone 仓库,然后创建分支:

这时突然想起.git文件夹中,文件的存放结构:

而对于分支名bug/v1.0.1.1-hotfix在上图中的bug所在目录创建同名的bug目录这受到了操作系统的限制,导致出现上诉的问题。

最后再吐槽下gitlab的API。

什么是循环依赖?

在两个或更多模块相互依赖的时候就可能会出现循环依赖。这是因为每个模块都是根据其他模块定义的(见图1)。

例如:

1
2
functionA():  
functionB()


1
2
functionB():  
functionA()

upload successful(图1)

循环依赖的问题

循环依赖会使得你的代码问题多多。例如:可能在模块间产生紧密的耦合,随之就减少了代码的可复用性。从长远来看,这使得代码维护更加困难。

此外,循环依赖可能会成为潜在问题的根源,例如无限递归,内存泄漏,级联反应。如果你不小心在代码中制造了循环依赖,将会使得调试很多其造成的潜在问题变得更加困难。

阅读全文 »

进程与线程是操作系统中非常重要的内容,也是程序员应该牢记于心的知识。

进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的基本单位.

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

阅读全文 »

Python中的迭代器和生成器是对于初学者来说很容易混淆,更说不出两者的区别。
当然这也是面试中的常考内容,我今天将要详细介绍下它们。

迭代器

Python中的对象之所以能迭代是因为对象定义(或继承)了__iter____getitem__

阅读全文 »

单例模式是一种比较常见的设计模式,所以顺理成章的成为我们第一个介绍的设计模式。
应用场景:

  • 资源共享。例如,数据库连接,配置管理,日志管理。

实现方法有多种:

阅读全文 »

延迟绑定出现在闭包问题中。下面我们看一个闭包的例子:

1
2
3
4
5
6
7
8
def gen_mul(n):
def mul(x):
return n*x

return mul

double = gen_mul(2)
doubled_value = double(6) # 12

阅读全文 »

虽然高德纳说过”冒泡排序除了它迷人的名字和导致了某些有趣的理论问题这一事实
之外,似乎没有什么值得推荐的。”,但是还是值得研究一下的^_^

阅读全文 »