如何选择开源项目?
如何选择开源项目?文章目录
★License(授权协议、许可证)★技术层面的因素★普及程度(用户的人气)★活跃程度(开发的人气)★其它的风险
近几年开源项目越发普及,很多商业软件都逐渐引入开源项目。由于俺负责的产品线采用了不少开源项目(主要是 C++、Java、Python),这几年就经常会碰到开源项目选型的问题(从几个具有类似功能的开源软件项目中进行抉择)。今天我就大概聊一下自己的几点看法,供大伙儿参考。
★License(授权协议、许可证) License 是很多人容易忽略的一个问题,所以我们先来聊一下 License 的问题。因为公司里面开发的软件大都属于商业软件(更严谨的叫法是“专属闭源软件”),根据开源协议和商业的冲突程度,可以分为三种:非常友好、不太友好、很敌对。下面分别介绍一下:
◇对商业闭源软件“很敌对”的协议 先说说“很敌对”的协议:GPL(详细解释请看“这里”)。GPL 和闭源软件是有严重冲突的。通俗地说,如果某个软件使用了基于 GPL 协议的【动态库或静态库】,则【整个软件】必须也用 GPL 协议发布(这就是大名鼎鼎的【GPL 传染性】)。也就是说——如果 ...
netcat
扫盲 netcat(网猫)的 N 种用法——从“网络诊断”到“系统入侵”文章目录
★引子★netcat 是个啥玩意儿?★netcat 能干啥?★nc 命令行简介★招数1:(网络诊断)测试某个远程主机的【监听】端口是否可达★招数2:(网络诊断)判断防火墙是否“允许 or 禁止”某个端口★招数3:(渗透测试)用 nc 玩“端口扫描”★招数4:(隐匿性)如何让 nc 走暗网(以 Tor 为例)★招数5:(信息收集)用 nc 探测“服务器类型”和“软件版本”(以 SSH 为例)★招数6:(隐匿性)用 nc 实现【彻底无痕】的 Web 访问★招数7:(网络配置)基于 nc 的端口转发(Port Forward)★招数8:(网络配置)基于 nc 的代理转发(Proxy Forward)★招数9:(系统管理)用 nc 传输文件★招数10:(系统管理)用 nc 远程备份整个磁盘★招数11:(入侵手法)用 nc 开启【被动】连接型后门★招数12:(入侵手法)用 nc 开启【主动】连接型后门★附录:netcat 的【其它变种】
★引子 这些年来,俺在博客上写了若干“信息安全教程”,其中不免会涉及到【网 ...
java新手的通病
数据结构和算法为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东。不管你使用 Java 还是其它的什么语言,都离不开它。而且这玩意是跨语言的,学好之后不管在哪门语言中都能用得上。
既然“数据结构和算法”这么重要,为什么很多 Java 新手却很不熟悉捏?我琢磨了一下,估计有两种可能。有些人虽然是计算机系毕业的,但是当初压根没好好学过这门课程,到工作时早都还给老师了;还有一些人是中途转行干编程,转行后又没有好好地打基础(都指望速成)。 下面我列出几个很基本的问题,如果你每一个问题都搞得很清楚,那说明你过了这关,可以去看看下一个帖子了。否则的话,你赶紧去找本算法和数据结构的书恶补一下吧。
★什么时候该用数组型容器、什么时候该用链表型容器?★什么是散列函数?HashMap 的实现原理是什么?★什么是递归?如果你以前从来没写过递归函数,尝试着写一个(比如用递归函数进行目录树遍历)。★什么是算法复杂度?★你是否理解空间换时间的思想?★写一个针对整数数组的冒泡排序函数,看看你要修改几次才能跑通。★写一个针对整数数组的二分查找函数,看看你要修改几次才能跑通。
缺乏面向对象基本功按 ...
学习技术三部曲
学习技术的三部曲:WHAT、HOW、WHY文章目录
★第一步:WHAT★第二步:HOW★第三步:WHY
最近几天有些网友在邮件里面问我关于学习的问题。有好几个人觉得工作了几年,也学会了不少的类库、框架、甚至语言,但是感觉自己的能力没有太大的提高。因此今天来说一下我个人对这方面的体会,希望对大伙儿(尤其是新手)有帮助。 先声明一下,本帖子讨论的三部曲是指你已经选定了某个技术方向之后,该如何学习;至于如何选定技术方向,则属于另一个话题,不在今天的讨论之列。 我把学习归类为三个步骤:What、How、Why。经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在 WHAT 阶段。下面我把这三个步骤解释一下。
★第一步:WHAT 所谓的“WHAT”也就是“What is it?”——这是最简单的层次。在这个层次,你要搞清楚某个东东是【什么】样子的?有【什么】用处?有【什么】特性?有【什么】语法?…… 举例如下:
对于学习语言(比如 C++、Java、Python),大部分人都能够掌握基本的语法和标准库,然后用它写一些小程序(诸如二分查找、冒泡排序、简单文件操作 ...
Linux&命令行
扫盲 Linux&UNIX 命令行——从“电传打字机”聊到“shell 脚本编程”文章目录
★引子★本文目标读者★一切都从【电传打字机】开始说起★终端(terminal/TTY)★终端的3种【缓冲模式】——字符模式、行模式、屏模式★终端的【回显】★(早期的)系统控制台/物理控制台(system console)★(如今的)虚拟控制台(virtual console)★终端模拟器(terminal emulator)★伪终端(PTY/pseudotty/pseudoterminal)★shell——命令行解释器★shell 的基本功能★进程的启动与退出★“进程控制”与“信号”★作业控制(job)★环境变量(environment variable)★“标准流”(standard stream)与“重定向”(redirection)★匿名管道(anonymous pipe)★批处理(batch)★shell 脚本★结尾
★引子 首先, 这篇是为了补前几年的“欠债”。这些年,俺写了好多篇 Linux 相关的技术教程。但还从来没有【系统性】地介绍 Linux 命令行相关的基本概念和基本知识 ...
大话计算机网络
计算机网络通讯的【系统性】扫盲——从“基本概念”到“OSI 模型”文章目录
★本文的目标读者★基本概念★从“分层”到“参考模型”★OSI 概述★物理层:概述★物理层:具体实例★链路层:概述★链路层:具体实例★网络层:概述★网络层:具体实例★传输层:概述★传输层:具体实例★业务层(OSI 上三层):概述★业务层(OSI 上三层):具体实例★杂项★参考书目
近期老是在写政治博文,又有两个月左右没写技术博文了。某些技术型的读者,背地里肯定骂俺太懒。今天搞了一篇内容特别长,信息量特别多的。喜欢看技术博文的读者,可以慢慢消化。
★本文的目标读者 今天这篇的标题是“扫盲”,也就是说:即使那些完全不懂 IT 领域,也不懂通讯领域的读者,依然能看懂(至少能看懂一部分)。为了做到这点,俺会尽量使用通俗的比喻,并适当加一些示意图。 另外,就算你已经比较了解网络通讯领域,本文中提到的某些部分,也可能是你所不知道的。也就是说:懂行的同学,看看此文,也会有帮助。 本文的标题特地强调了【系统性】——俺希望这篇教程能帮助读者对“计算机网络”这个领域进行系统性学习(何为“系统性学习”?请看这篇教程) 为了 ...
如何阅读一本书?
《如何阅读一本书》——书评及内容纲要文章目录
★为啥要推荐这本书?★此书的影响力★阅读的目的★主动阅读 VS 被动阅读★阅读的层次★如何读不同类型的书籍★阅读与心智的成长
★为啥要推荐这本书? 俺写博客奉行一个宗旨——【授人以鱼不如授人以渔】。而《如何阅读一本书》是阅读方面非常非常重要的【渔】。 为啥俺要介绍阅读方面的【渔】?主要有两个原因:原因1 想必大伙儿都意识到一个现象——如今大众的阅读水平是很差滴。即使一本不算难也不算厚的书,很多人也无法胜任。有些人甚至连阅读一篇较长的博文(超过1万字)都做不到——所以俺的大部分博文都尽量控制在几千字,以照顾某些阅读能力不够的同学。原因2 还有一个原因促使俺推荐此书——最近半年分享了很多电子书。但是据俺收到的反馈,很多人虽然下载了,却没怎么读。俺猜测,还有些人是因为缺乏阅读技能,导致收获不大。
如果你也感觉自己的阅读能力有待提高,这本书是非常非常值得【从头看完】滴。
★此书的影响力 俺单独写一篇博文来推荐的书,通常都是老书——这本也不例外。 此书最早出版于1940年(在这个年代,可能你的父母还没出生)当时立刻就成为畅销书,还被翻 ...
2021暑假leetcode训练(一)
初级算法(一)写在前面因为还在学习C++,所以本次刷题所使用的编程语言为C。下学期我们会开一门叫做《计算机算法》的专业课,我想先提前玩一玩算法,所以就通过leetcode平台去刷题了。在每道算法题解中,我会给出一种或多种解法(我的解法和其他人比较好的解法)。
删除排序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
12345678// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。for (int i = 0; i < len; i++) & ...
python与数据分析题库
第一章 Python与数据分析一、选择题
数据分析第三方库包括( A B C )
A. NumPy B. Matplotlib C. Pandas D. Pygame
不是数据分析常用工具的是( B )
A. Python B. Java C. MATLAB D. R
二、填空题
数据分析流程包括: 需求分析、数据获取、数据预处理、分析与建模、模型评价与优化、部署 等环节。
广义的数据分析包括 狭义数据分析 、 数据挖掘 两部分。
三、简单题
Python数据分析的优势。
答:1. 语法简单精炼。比起其他编程语言,Python更容易学习和使用。
功能强大的库。大量优秀好用的第三方库,扩充了Python功能,提升了Python的能力,使Python如虎添翼。
功能强大。Python是一个混合体,丰富的工具使它介于传统的脚本语言和系统语言之间。Python不仅具备简单易用的特点,还提供了编译语言所具有的软件工程能力。
不仅适用于研究和原型构建,同时也适用于构建生产系统。研究人员和工程技术人员使用同一种编程工具, ...
操作系统题库
虚拟内存方案为页表项使用了一个特殊的高速缓存,通常称为( 转换检测缓冲区(TLB) )。
根据操作系统内核是否能感知线程,可以把线程分为两类,其中( 用户级线程 )对程序员来说是可见的,而对内核来说却是不可见的。
当系统采用资源有序分配的方法预防死锁时,它破坏了死锁的必要条件中的(循环等待 )条件
处理多个中断有两种方法,分别是( 顺序处理 )和(嵌套处理 );
页表项中有一个控制位用来表示当前页是否在内存中,它叫做( 存在位 ),当此控制位未置位时,产生一次内存访问故障,称为( 缺页中断 )
在最高响应比优先调度算法中,当各个进程的等待时间相同时,( 服务时间长 ) 的进程将优先调度;当各进程的服务时间相同时,( 等待时间长 ) 的进程将优先调度。
两级存储器提高性能的理论基础是 (局部性原理 ) 。
处理死锁通常有三种方法 (静态预防 ) 、 (动态避免 ) 、 ( 动态检测及解除 ) 。
现代操作系统进程管理的基本功能是 (创建 ) 、 ( 管理 )、 ( 终止 ) 进程。
对I/O操作可能的三种技术 ( 程序I/O )、(中断I/O )、( DM ...