jQuery的选择器中的通配符

thbcm阅读(181)

jQuery的选择器中的通配符

1.选择器

(1)通配符:

$(“input[id^=’code’]”);//id属性以code开始的所有input标签

$(“input[id$=’code’]”);//id属性以code结束的所有input标签

$(“input[id*=’code’]”);//id属性包括code的所有input标签

(2)根据索引选择

$(“input[id^=’code’]”);//id属性以code开始的所有input标签

$(“input[id$=’code’]”);//id属性以code结束的所有input标签

$(“input[id*=’code’]”);//id属性包括code的所有input标签

(3)取得jQueryObj下一级节点的input个数

jqueryObj.children(“input”).length;

(4)取得 class 为main 的标签的子节点下所有<a>标签

$(“.main > a”);

(5)选择紧邻标签

jqueryObj.next(“div”);//获得jqueryObj标签的后面紧邻的1个div,nextAll获得所有

2.挑选器

//not

$(“#code input:not([id^=’code’])”);//id为code标签内不包括id以code开始的所有input标签

3.事件

//处理文本框上的键盘操作

jqueryObj.keyup(function(event){

var keyCode = event.which;//获得当前按下键盘的键值,回车键为13

}

4.工具函数

$(‘#someField’).val($.trim($(‘#someField’).val()));//消除空格,语法:$.trim(value)

还有更多的jQuery教学尽在:jQuery教程

jQuery新手入门视频课程:小白学前端:jQuery新手入门

以及边学边练的:jQuery微课

JavaScript:onload和ready的不同

thbcm阅读(170)

在学习 JavaScript 时,常常使用的是 window.onload 方法,在 jQuery 中,又学习使用了 $(document).ready() 方法。其实 jQuery 就是一种轻量级的JavaScript。这两个事件都是在页面文档加载时触发的,但是二者还是有区分的,其实我的内心里也一直困惑着,但是困惑总是要有明朗的一天的。

下面就说说它们之间的不同吧!

 

1.履行时间

window.onload( ) 必须等到页面内包括图片的所有元素加载终了后才能履行。 

$(document).ready( )是 DOM 结构绘制终了后就履行,没必要等到加载终了。也就是说 $(document).ready( ) 要比window.onload( ) 先履行。

2.编写个数不同

window.onload( )不能同时编写多个,如果有多个 window.onload( ) 方法,只会履行一个 

$(document).ready( )可以同时编写多个,并且都可以得到履行

3.简化写法

window.onload( )没有简化写法 

$(document).ready(function( ){  })可以简写成 $(function( ){  });

 

在常规的 JavaScript 代码中,通常使用 window.onload( )方法,而在 jQuery 中,使用的是 $(document).ready( ) 方法。

$(document).ready( )方法和 window.onload( ) 方法有相似的功能,但是在履行时机方面是有区分的。window.onload( ) 方法是在网页中所有的元素(包括元素的关联文件)完全加载到阅读器后才履行,即 JavaScript 此时才可以访问网页中的任何元素。而通过 jQuery 中的 $(document).ready() 方法注册的事件处理程序,可以在 DOM 完全就绪时就能够被调用。此时,网页的所有元素对jQuery而言都是可以访问的,但是,这其实不意味着这些元素关联的文件都已下载终了。

     

例:load( ) 方法会在元素的 onload 事件中绑定一个处理函数。如果处理函数绑定给 window 对象,则会在所有内容(包括窗口、框架、对象和图象等)加载终了后触发,如果处理函数绑定在元素上,则会在元素的内容加载终了后触发。

最多见的例子是一些图片的网站,有时候你会看到有的网站是所有的图片都有一个占位符,在页面加载好之前图片就已占有一定的空间了,然后每张各自的加载,这类情势是使用了 $(document).ready( )方法。有的网页是要等全部图片都加载好以后 才显示网页,当网速不好的时候一个页面需要等很久才能显示出来,这就是使用了 window.onload( )方法。很明显,把网页解析为 DOM 树的速度比把网页中的所有关联文件加载终了的速度快很多。

另外需要注意一点,由于在 $(document).ready() 方法内注册的事件,只要 DOM 就绪就会被履行,因此可能此时元素的关联文件未下载完。例如与图片有关的 HTML下载终了,并且已解析为 DOM 树了,但很有可能图片还未加载终了,所以例如图片的高度和宽度这样的属性此时不一定有效。要解决这个问题,可使用 JQuery 中另外一个关于页面加载的方法—— load() 方法。load() 方法会在元素的 onload 事件中绑定一个处理函数。如果处理函数绑定给 window 对象,则会在所有内容(包括窗口、框架、对象和图象等)加载终了后触发,如果处理函数绑定在元素上,则会在元素的内容加载终了后触发。

总结:

原以为大致相同的两种方法,原来有这么多的差异,就加载的速度上就是很明显。所以,学习中不要太自以为是,还是一切都要弄清楚才行。

Java单例设计模式—-懒汉与饿汉

thbcm阅读(179)

关于设计模式,这其实是单独存在的东西,它不属于 Java,也不属于任何语言所独有,但是在 Java 中使用较多,所以今天小编就给大家介绍下单例设计模式中的饿汉和懒汉这俩朴素的打工人。推荐好课:Java 多线程讲解深入解析 Java 面向对象

首先,我们先了解下单例模式的定义:单例设计模式目的是使得类的一个对象成为系统中的唯一实例。

再看下,Java 中单例模式的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

那么,所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。

“懒汉式”:是在你真正用到的时候才去建这个单例对象;

“饿汉式”:在不管你用的用不上,一开始就建立这个单例对象。

一、饿汉式

饿汉式:通俗的来讲,这位打工人对干饭特积极,不管饿不饿都跟饿死鬼似的,老早的就把干饭工具准备好了( new 对象),随时准备干饭。

上代码:

class Hungry_people{

    private int id;

    private String name;

    private Hungry_people(){

    }        //构造器私有化

    private static Hungry_people Instance=new Hungry_people();  

    //内部创建类的对象

    public static Hungry_people getInstance(){

        return Instance;

    }

    //提供公共的静态方法,且返回对象。

}

public class Test1 {

    public static void main(String[] args) {

        Hungry_people hungry1 = Hungry_people.getInstance();

        Hungry_people hungry2 = Hungry_people.getInstance();

    }

}

二、懒汉式

懒汉式:通俗的讲,这位打工人对干饭一点都不上心,碗筷脏了也不理,啥时候要干饭了才来洗碗筷( new 对象)。

上代码:

class Lazy_people {

    private Lazy_people(){

    }

    private static Lazy_people Instance = null;

    //声明当前对象没有初始化值

    public static Lazy_people getInstance(){

        if (Instance == null){

            Instance=new Lazy_people ();

            //需要再造对象,不要就不new对象了

        }

        return Instance;

    }

}

public class Test2 {

    public static void main(String[] args) {

       Lazy_people lazy1 = Lazy_people.getInstance();

    }

}

三、饿汉和懒汉有啥不同

对于饿汉式:

优点:线程贼安全

缺点:对象加载时间过长

对于懒汉式:

优点:延迟对象的创建,更快

缺点:多线程安全贼低,但是可以通过优化使其可用。

四、常见面试题

1.懒汉式和饿汉式有什么不同?

答:懒汉式的特点在于实例的延迟加载。

2.懒汉式的延迟加载有没有问题?

答:遇到多线程访问时会出现安全问题。

3.如何解决该问题?

答:可以增加同步来解决。

4.增加同步的方式?

答:用同步方法或同步代码块都可以,但是同步方法稍微有点低效。

5.增加同步时,使用的锁是哪一个?

答:该类所属的字节码文件对象。

JavaScript之正则表达式

thbcm阅读(170)

1.什么是正则表达式

正则表达式(Regular Expression)是一个描写字符模式的对象,ECMAcript 的 RegExp 类表示正则表达式,而 String 和 RegExp 都定义了使用正则表达式强大的模式匹配和文本检索与替换的函数

2.创建正则表达式的方式

第一种创建方式

var box=new RegExp(‘box’); //第1个是参数字符串 var box=new RegExp(‘box’,’ig’) //第2个是可选模式修饰符

第二种创建方式

var box=/box/; //直接用反斜杠 <span style=”white-space:pre”> </span>var box=/box/ig; //在第2个反斜杠后面加上模式修饰符

3.测试正则表达式

RegExp 对象包括两个方法:test() 和 exec() 用于测试字符串匹配。

test()方法在字符串中查找是不是存在指定的正则表达式并返回布尔值,如果存在则返回true。不存在则返回false. 

exec() 也用于在字符串中查找正则表达式,如果exec()方法履行成功,则返回包括该查找字符串的相干信息,如果失败,则返回null.

/*使用new运算符的test方法示例*/ var pattern=new RegExp(‘box’,’i’); //创建正则表达式,不辨别大小写 var str=”This is a Box!”; //创建要比对的字符串 alert(pattern.test(str)); //通过test()方法验证是不是匹配 /*使用字面量方式的test方法示例*/ var pattern=/box/i; //创建正则表达式,不辨别大小写 var str=”This is a Box!”; alert(pattern.test(str)); /*使用exec返回匹配数组*/ var pattern=/box/i; var str=”This is a Box!”; alert(pattern.exec(str)); //匹配了返回数组,否则返回null

4.获得控制

正则表达式元字符是包括特殊含义的字符。它们有1些特殊功能,可以控制匹配模式的方式,反斜杠后的元字符将失去其特殊含义。

贪婪与怠惰

贪婪模式与怠惰模式的语法区分在于重复限定修饰符的后面是不是有问号,有的话就是怠惰模式,否则就是贪婪模式。

贪婪量词,是先吃尽所有字符,然后再1个1个地吐出来,直到匹配成功为止。

怠惰量词,是从头开始1个字符1个字符地吃,直到匹配成功为止。即贪婪是逐步向前匹配,而怠惰是向后渐渐匹配。

例子:

<span style=”white-space:pre”> </span>
var pattern=/[a-z]+?/ //?关闭了贪婪匹配,只替换了第1个 
<span style=”white-space:pre”> </span>
var str=’ajfifdjnfasdfdasdgh’; 
<span style=”white-space:pre”> </span>
var result=str.replace(pattern,’xxx’); 
<span style=”white-space:pre”> </span>
alert(result); //返回xxxjfifdjnfasdfdasdgh

<span style=”white-space:pre”> </span>
<pre name=”code” class=”javascript”>
<span style=”white-space:pre”></span
>var pattern=/8(.+?)8/g; //制止了贪婪,开启的全局 
<span style=”white-space:pre”> </span>
var str=’this is 8abc8, that is 8abc8, there is 8abc8′; 
<span style=”white-space:pre”> </span>
var result=str.replace(pattern,'<strong>$1</strong>’); 
<span style=”white-space:pre”> </span>document.write(result); //返回this is abc, that is abc, there is abc   

总结:

个人认为,通过正则表达式在客户端进行验证,可以减轻到服务器端后再验证对服务器的压力

以下课程可供学习实践
正则表达式微课

正则表达式浅析视频课

正则表达式简明参考

那些计算机科学领域的大佬们,身为程序员的你听过几个?

thbcm阅读(201)

计算机科学(英语:computer science,有时缩写为CS)是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。计算机科学包含很多分支领域;有些强调特定结果的计算,比如计算机图形学;而有些是探讨计算问题的性质,比如计算复杂性理论;还有一些领域专注于怎样实现计算,比如编程语言理论是研究描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于怎样使计算机和计算变得有用、好用,以及随时随地为人所用。

计算机科学中的理论部分在第一台数字计算机出现以前就已存在。计算机科学根植于电子工程、数学和语言学,是科学、工程和艺术的结晶。它在20世纪最后的三十年间兴起成为一门独立的学科,并发展出自己的方法与术语。

那么在计算机科学领域里都有哪些大佬呢?随编程狮小编一起盘点下吧~

阿里·艾达尔(Ali Aydar)

阿里·艾达尔是一位计算机科学家和互联网企业家。他是 Sporcle 的首席执行官。他最出名的身份是 Napster 的早期雇员和关键技术贡献者。艾达尔购买了 Fanning 的第一本有关 C ++ 编程的书,这是两年后他用来构建 Napster 文件共享软件的语言。

艾伦·图灵(Alan Turing)

艾伦·图灵(1912年6月23日至1954年6月7日)是一位英国数学家和计算机科学家,他对算法和计算的概念进行了形式化。图灵被广泛认为是理论计算机科学和人工智能之父。他于1936年发明了著名的Turing机器,该机器被认为是通用计算机的模型。

安妮塔·博格(Anita Borg)

安妮塔·博格(1949年1月17日至2003年4月6日)是美国计算机科学家。她成立了妇女与技术研究所(现为安妮塔·博格妇女与技术研究所)。在 Digital Equipment 期间,她开发了一种方法,并获得了一种用于生成完整地址跟踪信息的方法的专利,该方法可用于分析和设计高速存储系统。

阿尔弗雷德·阿霍(Alfred Aho)

阿尔弗雷德·阿霍(1941年8月9日出生)是加拿大计算机科学家,以其在编程语言,编译器和相关算法方面的工作以及有关计算机编程艺术和科学的教科书而闻名。阿霍在多伦多大学获得工程物理学学士学位。

比尼亚·斯特鲁斯特鲁普(Bjarne Stroustrup)

比尼亚·斯特鲁斯特鲁普(出生于1950年12月30日)是丹麦的计算机科学家,最著名的事迹是创建和开发了广泛使用的 C ++ 编程语言。他是杰出的研究教授,并担任工程学院计算机科学系主任。

比尔盖茨(Bill Gates)

比尔·盖茨(生于1955年10月28日)是美国商业大亨,慈善家,投资者,计算机程序员和发明家。盖茨是微软的前首席执行官兼董事长,他与保罗·艾伦共同创立的微软是世界上最大的个人计算机软件公司。

布鲁斯·雅顿(Bruce Arden)

布鲁斯·雅顿(1927年生于明尼苏达州明尼阿波利斯)是美国计算机科学家。他于1949年毕业于普渡大学并获得理学学士(EE)学位,并于1950年开始在通用汽车公司艾里逊分公司的 IBM 混合(机械和电子)卡编程计算机/计算器的接线和编程工作,开始了他的计算机职业生涯。

布伦丹·艾希(Brendan Eich)

布伦丹·艾希(生于1960年或1961年)是一位美国技术专家,也是 JavaScript 脚本语言的创建者。他与他人共同创立了 Mozilla 项目,Mozilla 基金会和 Mozilla 公司,并担任 Mozilla 公司的首席技术官和简短的首席执行官。

巴里·勃姆(Barry Boehm)

巴里·勃姆(出生于1935年)是美国软件工程师,计算机科学,工业和系统工程学的著名教授,TRW 软件工程学的教授。他以在软件工程领域的许多贡献而闻名。

伯特·波斯(Bert Bos)

伯特·波斯(出生于1963年11月10日,荷兰海牙)是计算机科学家。他在格罗宁根大学学习数学,并用脚本语言 Gist 撰写了有关快速用户界面开发的博士学位论文。1996年,他加入了万维网联盟(W3C)来研究级联样式表(CSS)。

布莱恩·坎特里(Bryan Cantrill)

布莱恩·坎特里(生于1973年)是美国软件工程师,曾在 Sun Microsystems 和后来收购 Oracle 的 Oracle Corporation 任职。Cantrill 因其 DTrace 的开发而被列入 TR35 名单,DTrace 是 OS Solaris 10 的功能,为实时跟踪和诊断软件提供了一种非侵入性的手段。他目前是 Joyent 的首席技术官。

查尔斯·巴贝奇 (Charles Babbage)

查尔斯·巴贝奇 FRS(1791年12月26日至1871年10月18日)是英国的多面手。他是一位数学家,哲学家,发明家和机械工程师,他因提出了可编程计算机的概念而广为人知。

丹尼斯·里奇 (Dennis Ritchie)

丹尼斯·里奇(1941年9月9日至2011年10月12日)是美国计算机科学家。他创建了 C 编程语言,并与长期的同事 Ken Thompson 一起创建了 Unix 操作系统。里奇(Ritchie)和汤普森(Thompson)于 1983年获得了 ACM 颁发的图灵奖。

戴维·布朗 (David J. Brown)

戴维·布朗是美国计算机科学家。他是一个在斯坦福大学帮助开发系统的小组成员之一,后来创建了 Sun Microsystems,后来在 1982年创建了 Silicon Graphics。他为 Sun 的主要系统软件产品 Solaris 定义了应用程序二进制接口。

埃德加·科德 (Edgar F. Codd)

埃德加·科德(1923年8月19日至2003年4月18日)是一位英国计算机科学家,在 IBM 工作期间,他发明了数据库管理的关系模型,这是关系数据库的理论基础。他为计算机科学做出了其他有价值的贡献。

弗朗西斯·艾伦 (Frances Allen)

弗朗西斯·艾伦(出生于1932年8月4日)是美国计算机科学家,也是优化编译器领域的先驱。她的成就包括在编译器,代码优化和并行化方面的开创性工作。她还在编程语言的情报工作中发挥了作用。

戈登·贝尔 (Gordon Bell)

戈登·贝尔(出生于1934年8月19日)是美国电气工程师兼经理。Bell 是数字设备公司(DEC)1960–1966的早期雇员,设计了几台 PDP 机器,后来成为 1972-1983年的工程副总裁,负责监督 VAX 的开发。

格雷戈里·柴廷 (Gregory Chaitin)

格雷戈里·柴廷(1947年11月15日生于阿根廷)是阿根廷裔美国数学家和计算机科学家。从 1960年代后期开始,Chaitin 为算法信息论和元数学做出了贡献,特别是等效于 Godel 不完全性定理的计算机理论结果。

詹姆斯·高斯林 (James Gosling)

詹姆斯·高斯林 OC(出生于1955年5月19日)是加拿大计算机科学家,最著名的是 Java 编程语言之父。1977年高斯林从卡尔加里大学获得计算机科学理学学士学位。

约翰·巴克斯 (John Backus)

约翰·巴克斯(1924年12月3日至2007年3月17日)是美国计算机科学家。他领导的团队发明了第一种被广泛使用的高级编程语言(FORTRAN),并且是 Backus-Naur 形式(BNF)的发明者,该形式被广泛用于定义形式语言语法。

乔恩·克罗克罗夫特 (Jon Crowcroft)

约翰·克罗克罗夫特( 1957年11月23日出生)是剑桥大学计算机实验室的通信系统马可尼教授。乔恩·克罗克罗夫特(Jon Crowcroft)教授以其对互联网发展的许多重大贡献而著称。他在1980年代有关卫星链路互连技术的工作为农村宽带铺平了道路。

拉里·佩奇 (Larry Page)

拉里·佩奇(1973年3月26日出生)是美国商业大亨和计算机科学家,与谢尔盖·布林(Sergey Brin)一起是 Google 的共同创始人。2011年4月4日,Page 接替 Eric Schmidt 担任 Google 首席执行官。截至2014年,佩奇的个人财富估计为32美元。30亿,在福布斯富豪榜上排名第19。

拉里·沃尔 (Larry Wall)

拉里·沃尔(生于1954年9月27日)是一位计算机程序员和作家,最著名的是 Perl 编程语言和 Camelia 的创建者,而 Camelia 是 Perl 6 的敏捷代言人。 1976年在西雅图太平洋大学开始高等教育之前。

莱纳斯·托瓦尔兹 (Linus Torvalds)

莱纳斯·托瓦尔兹(出生于1969年12月28日)是一位芬兰美国软件工程师,他以 Linux 内核的设计和开发而闻名。他与山中伸弥(Shinya Yamanaka)一起获得了由芬兰技术学院颁发的 2012年千禧技术奖,以表彰他为计算机创建了导致广泛使用的 Linux 内核的新型开源操作系统。

路易斯·冯·安 (Luis Von Ahn)

路易斯·冯·安(生于1979年)是危地马拉的企业家,也是卡内基梅隆大学计算机科学系的副教授。他是众包的先驱之一。他是 reCAPTCHA 公司的创始人,该公司于2009年被 Google 收购,并且是流行的语言学习平台多邻国(Duolingo) 的联合创始人兼首席执行官。

卢卡·卡德利(Luca Cardelli)

卢卡·卡德利 FRS 是一位意大利计算机科学家,是英国剑桥微软研究院的助理总监。Cardelli 以类型理论和操作语义方面的研究而闻名。除其他贡献外,他还帮助设计了 Modula-3,并为(非纯)功能编程语言 ML 实现了第一个编译器。

迈克尔·戴尔 (Michael Dell)

迈克尔·戴尔(1965年2月23日出生)是美国商业大亨,投资者,慈善家和作家。他被称为戴尔公司的创始人兼首席执行官,戴尔公司是全球领先的个人计算机(PC)销售商之一。

迈克尔·德图佐斯 (Michael Dertouzos)

迈克尔·德图佐斯(1936年11月5日至2001年8月27日)在1974年至2001年期间担任麻省理工学院教授和麻省理工学院计算机科学实验室(LCS)主任。在德图佐斯任期内,LCS 在各个领域进行了创新。 ,包括 RSA 加密,电子表格,NuBus,X Window 系统和 Internet。

莫里斯·文森特·威尔克斯 (Maurice Vincent Wilkes)

莫里斯·文森特·威尔克斯(1913年6月26日至2010年11月29日)是英国计算机科学家,在计算领域取得了一些重要进展。威尔克斯去世时,他是剑桥大学的名誉教授。他获得了许多荣誉。

内洛·克里斯蒂安尼(Nello Cristianini)

内洛·克里斯蒂安尼(生于1968年)是布里斯托大学(University of Bristol)的人工智能教授,曾获得英国皇家学会沃尔夫森研究优异奖。他在机器学习,人工智能和生物信息学等不同领域的研究贡献。具体来说,他的工作集中在学习算法的统计分析上。

菲利普·唐·埃斯特里奇 (Philip Don Estridge)

菲利普·唐·埃斯特里奇(1937年6月23日至1985年8月2日),被称为 Don Estridge,领导了原始 IBM 个人计算机(PC)的开发,因此被称为“ IBM PC之父”。他的决定极大地改变了计算机行业,导致买卖个人计算机的数量大大增加。

菲利普·马特豪斯·哈恩 (Philip Matthaus Hahn)

菲利普 (1739年11月25日在斯查恩豪森至1790年5月2日在埃赫特丁根)是一位德国牧师和发明家。大约在 1763 年,他发明了一种精确的日晷,或称日晷,其中包含了对均时差的校正。

珀·布朗奇·汉森 (Per Brinch Hansen)

珀·布朗奇·汉森(1938年11月13日至2007年7月31日)是丹麦裔美国计算机科学家,以并发编程理论而闻名。1970年,在 Ole-Johan Dahl 和 Kristen Nygaard 的编程语言 Simula 67 的启发下,他对计算机科学的研究专注于并发编程,他在 1972年发明了显示器概念。

拉斯穆斯·莱尔多夫 (Rasmus Lerdorf)

拉斯穆斯·莱尔多夫(出生于1968年11月22日)是具有加拿大国籍的格陵兰语程序员。他创建了 PHP 脚本语言,创作了该语言的前两个版本,并参与了由包括 Jim Winstead 在内的一组开发人员领导的更高版本的开发。

理查德·斯托曼 (Richard Stallman)

理查德·斯托曼 (1953年3月16日出生)是美国人,是软件自由主义者和计算机程序员。他以启动 GNU 项目,建立自由软件基金会,开发 GNU 编译器集合和 GNU Emacs 以及编写 GNU 通用公共许可证而闻名。

罗伯特·博耶 (Robert S.Boyer)

罗伯特·博耶是德克萨斯大学奥斯汀分校的计算机科学,数学和哲学系退休教授。他和 J Strother Moore 于1977年发明了 Boyer-Moore 字符串搜索算法,这是一种特别高效的字符串搜索算法。他和 Moore 还在1992年合作研究了 Boyer-Moore 自动定理证明器 Nqthm。

罗伯特·鲍勃·卡恩 (Robert Bob Kahn)

罗伯特·鲍勃·卡恩(1938年12月23日出生)是一位美国工程师,被誉为“互联网之父”之一,与美国互联网先驱温特·瑟夫(Vint Cerf)分享了这一称号。1997年12月,卡恩(Kahn)和瑟夫(Cerf)因建立和开发互联网而获得了美国国家技术勋章。Kahn 是 TCP / IP 协议(互联网上最重要的通信协议)的共同发明者。他负责发起DARPA的Internet程序。

2004年,卡恩(Kahn)荣获了著名的ACM艾伦·M·图灵(Alan M. Turing)奖。2005年,他获得了总统自由勋章-美国最高的平民奖。

萨比尔·巴蒂亚(Sabeer Bhatia)

萨比尔·巴蒂亚于1968年12月30日出生在昌迪加尔。他在班加罗尔长大,在普纳的毕晓普学校和班加罗尔的圣约瑟夫男孩中学接受早期教育。Sabeer Bhatia 是美国印第安人企业家,他创立了 Hotmail 电子邮件服务和 Jaxt。

谢尔盖·布林 (Sergey brin)

谢尔盖·布林(出生于1973年8月21日)是美国计算机科学家和互联网企业家,他与拉里·佩奇(Larry Page)共同创立了 Google,这是最赚钱的互联网公司之一。截至2014年6月,他的个人财富估计为 300亿美元。布林和佩奇共同拥有公司约 16%的股份。

谢尔盖·阿比特布尔 (Serge Abiteboul)

谢尔盖·阿比特布尔是一位计算机科学家,致力于数据管理,数据库理论和有限模型理论领域。他目前是法国国家信息和自动化研究所(INRIA)的高级研究员,该研究所专注于计算机科学和相关领域,并且是法国学院的教授。

史蒂夫·乔布斯 (Steve Jobs)

史蒂夫·乔布斯是苹果计算机公司的联合创始人,众所周知,他是美国发明家,他在1970年代和1980年代引领了微计算机革命。乔布斯(Jobs)与他的搭档史蒂夫·沃兹尼亚克(Steve Wozniak)于1976年出生于加利福尼亚州的旧金山,奠定了苹果计算机公司的基础。

在史蒂夫(Steve)的领导下,苹果推出了一系列革命性产品,例如 iPhone,iPod 和 iPad,这些产品对现代技术做出了重大贡献。史蒂夫(Steve)也被称为Macintosh的架构师,Macintosh是一种广泛流行的操作系统,它促进了具有GUI的计算机的大量生产。在与胰腺癌长期斗争之后,史蒂夫于2011年去世。

蒂姆·伯纳斯·李 (Tim Berners Lee)

蒂姆·伯纳斯·李(1955年6月8日出生),也被称为“ TimBL”,是英国的计算机科学家,最著名的是万维网的发明者。Berners Lee 是万维网联盟(W3C)的负责人,该联盟负责监督 Web 的持续发展。

温特·瑟夫

范特·瑟夫Vint Cerf,生于1943年6月23日)是美国互联网先驱,他被公认为“互联网之父”之一,与美国工程师鲍勃·卡恩(Bob Kahn)共享此头衔。他的贡献屡屡得到认可和称赞。他帮助开发了第一个连接到Internet的商业电子邮件系统(MCI Mail)。

以上就是 w3cschool 为您整理的计算机科学领域的大佬们,你认识几个呢?

GitHub 2020年度报告出炉:JavaScript稳居第一,Python终于超越Java

thbcm阅读(202)

  • 选自 | GitHub
  • 翻译整理 | W3Cschool

本文为 W3Cschool 编程狮翻译整理,转载请注明出处

2020年是非同寻常的一年,你以为疫情击垮了开发者?不!他们创造了更多代码…

Github作为全球最大的开源软件开发与管理社区,在每年十月都会推出“Octoverse”报告,从 Github 平台发布的 2020 年度报告我们可以看出:可能程序员从工作角度上来说,相比其他职业受到的影响会更小一点,因为程序员只要有一台电脑,哪怕在家里也能正常开工,甚至于很多程序员在疫情期间花费在项目开发上的时间更多了。

今年,大环境迫使我们许多人远程办公,我们的重点更多地转移到了育儿,学校教育,个人健康以及如何设法平衡所有这些方面。


但是,随着全球工作场所转移到新的现实中,我们还看到了通过开放源代码开发者之间的联系和友情的增加。考虑到这一点,要问的一个重要问题是我们如何使所有工作可持续发展。


由于自动化和协作,开发人员能够更有效地沟通并提高效率,从而节省了更多时间来执行最重要的工作。

今年的 Octoverse 报告包括三个方面的内容。

  • 生产力报告
  • 社区报告
  • 安全报告

受篇幅限制,我们只节选了其中几个亮点,可在 w3cschool编程狮 公众号后台回复 github2020 下载完整版的 The 2020 State of the OCTO— —VERSE

让我们回顾一下 今年在 GitHub 上构建的代码和社区…

基于2019年10月至2020年9月的数据收集范围。

项目 数据
GitHub上的开发人员总数 56M+
去年创建的新存储库 60M+
财富50强公司中 <br /> 使用 GitHub Enterprise 72%
去年增加的捐款 1.9B+

活跃用户的地理位置分布

分布 说明 数据
北美(North America) 比去年下降2% 34%
亚洲(Asia) 比去年增长1.1% 30.7%
欧洲(Europe) 比去年增加0.1% 26.8%
南美洲(South America) 比去年增加0.4% 4.9%
非洲(Africa) 比去年增加0.3% 2%
大洋洲(Oceania) 自去年以来没有变化 1.7%

历年热门语言排行

JavaScript 是世界上最流行的脚本语言,从2004年至今一直稳居榜首,万年老二 Java 在来势汹汹的 Python 面前终于败下阵来,退居第三。Ruby 虽然仍然是 Engine Yard 和 Heroku 等产品的核心,以及 Discourse、Homebrew 和 Vagrant 等项目背后的语言,但 Ruby 的走势并不乐观。

在过去的一年中,我们已经看到 GitHub 的规模和多样性在全球范围内不断增长。不仅仅是数字:贡献者的项目和技能也在不断扩大。

自去年以来,主要国家和地区的贡献者百分比增长

683npm 的中位数传递依赖项,其次是PHP(70),Ruby(68)和 Python(19)。所有这些都可能受到一个安全漏洞的影响。

59% 明年有机会从具有受支持软件包生态系统的活动存储库中获得安全警报

GitHub 上的大多数项目都依赖开源软件。该分析包括 2019年1月10日至 2020年9月30日之间每月至少有一个贡献的公共开源资源库。

以上为 W3Cschool 为您整理的 Github2020年度报告 部分内容,受篇幅限制,我们只节选了其中几个亮点,可在w3cschool编程狮 公众号后台回复github2020下载完整版的 The 2020 State of the OCTO— —VERSE

Python—-pandas:缺失值处理

thbcm阅读(165)

前言

Hello,屏幕前的小伙伴们大家好呀,一年又一年,一天又一天,转瞬之间梦幻般的 2020 年,也即将要过去了,小编先在这提前祝大家:元旦快楽。今天呢给大家分享在用 pandas 做数据分析时,遇到缺失值的几种处理方法。推荐好课:Python 自动化办公Python3进阶:数据分析及可视

当我们在处理数据时,遇到数值缺失的问题时,pandas 在这方面提供了很全面的方法,主要包括:

  • isnull()——找出缺失值;
  • notnull()——找出非缺失值;
  • dropna()——剔除缺失值;
  • fillna()——填充缺失值。具体使用方法请往下看。

一、isnull()

isnull() 用来找出缺失值的位置,返回一个布尔类型的掩码标记缺失值,下面是案例:

import pandas as pd

import numpy as np

data = pd.DataFrame({‘name’:[‘W3CSCHOOL’,np.nan,’JAVA’,’PYTHON’],’age’:[18,np.nan,99,None]})

data

执行以上代码得到数据如下:

        name   age

0  W3CSCHOOL   18.0

1    NaN NaN

2       JAVA   99.0

3     PYTHON   NaN

这里我们可以看到不管我们创建DataFrame时控制用的是np.nan还是None,创建后都会变成NaN。

data.isnull()

    name    age

0  False  False

1   True   True

2  False  False

3  False   True

二、notnull()

notnull()与isnull()正好相反,是找出非空值并用布尔值进行标记,下面是例子:

data.notnull()

    name    age

0   True   True

1  False  False

2   True   True

3   True  False

三、dropna()

dropna()就是字面意思,丢掉缺失值。

DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

参数:

  • axis:默认为 0,表示删除行还是列,也可以用“index”和“columns”表示;
  • how:{‘any’, ‘all’}, 默认为 ‘any’;any 表示只要该行(列)出现空值就删除整行(列),all 表示整行(列)都出现空值才会删除整行(列);
  • thresh:表示删除非空值小于 thresh 个数时删除;
  • subset:列表类型,表示哪些列里有空值才删除行或列;
  • inplace:与其他函数的 inplace 一样,表示是否覆盖原 DataFrame。

下面是例子:

data.dropna(axis=1,thresh=3)

              name

0        W3CSCHOOL

1              NaN

2             JAVA

3           PYTHON

data.dropna(axis=0,how=’all’)

              name   age

0        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON   NaN

data.dropna(subset = [‘name’])

              name   age

0        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON   NaN

四、fillna()

fillna()的作用是填充缺失值

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

参数:

  • value:设置用于填充 DataFrame 的值
  • method:默认为 None;设置填充 DataFrame 的方法有:‘backfill’, ‘bfill’, – ‘pad’, ‘ffill’四种,其中‘backfill’和 ‘bfill’是用前面的值填充空缺值,‘pad’和 ‘ffill’是用后面的值填充空缺值
  • axis:填充缺失值所沿的轴,与上文的 axis 设置方法一样
  • inplace:是否替换原 DataFrame,与上文的设置方法一样
  • limit:设置被替换值的数量限制
  • downcast:表示向下兼容转换类型,不常用

下面是例子:

data.fillna(0)

              name   age

0        W3CSCHOOL  18.0

1                0   0.0

2             JAVA  21.0

3           PYTHON   0.0

data.fillna(method=’ffill’)

              name   age

0        W3CSCHOOL  18.0

1        W3CSCHOOL  18.0

2             JAVA  21.0

3           PYTHON  21.0

Python开发常用知识点,你懂几个?

thbcm阅读(177)

本文主要讲解 Python 开发中常用到的基本语法知识点,算是高频的基础知识点,以熟悉知识点为主。

一、编码格式设置

  1. -*- coding: utf-8 -*-   # 指定编码格式为 UTF-8
  2. -*- coding: GB2312 -*-  # 指定编码格式为 GB2312

二、常用转义字符

  1. \n     换行符
  2. \t     制表符(Tab)
  3. \r     回车(Enter)
  4. \\     “\”字符
  5. \’     单引号 ‘
  6. \”     双引号 ”

三、运算符(非常规)

  1. **      乘方运算符
  2. //      取整运算符
  3. and     与
  4. or      或
  5. not     非     
  6. in      包含,同一性运算符,判断的是对象间的唯一身份标识符,也就是 id 相同(相同字符串 哈希值可能相同但 id 不同)
  7. not in  不包含
  8. is      身份运算符,判断两个标示符是不是引用自同一个对象
  9. is not  身份运算符,判断连个标示符是不是应用自不同对象

四、常用常量

  1. import          导入模块
  2. from … import   导入模块分支
  3. global          函数(方法)内使用,提升变量为全局变量
  4. None            没有值的对象,无
  5. True            真
  6. False           假
  7. “”         空字符串
  8. ()         空元组
  9. []         空列表
  10. {}         空字典

五、运算符优先级

  1. ** 指数 (最高优先级)
  2. ~ + – 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
  3. * / % // 乘,除,取模和取整除
  4. + – 加法减法
  5. >> << 右移,左移运算符
  6. & 位 ‘AND’
  7. ^ | 位运算符
  8. <= < > >= 比较运算符
  9. <> == != 等于运算符
  10. = %= /= //= -= += *= **= 赋值运算符
  11. is is not 身份运算符
  12. in not in 成员运算符
  13. not or and 逻辑运算符    

六、数据分类

  1. 标准数据类型        Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)
  2. 不可变数据           Number (数字)、String(字符串)、Tuple(元组)
  3. 可变数据              List(列表)、Sets(集合)、Dictionary(字典)
  4. Number(数字)     int、float、bool、complex(复数)

七、迭代器 & 生成器

  • 迭代器    迭代器是一个可以记住遍历的位置的对象。访问集合元素的一种方式

                     基本方法:iter() 和 next() 

  • 生成器    使用了 yield 的函数被称之为生成器,生成器是一个返回迭代器的函数,只能用于迭代操作。

                     在调用生成器运行的过程中,每次遇到 yield 时,函数会暂停并保存当前所有的运行信息,返回 yield 的值,并在下一次执行 next() 方法时从当前位置继续运行

八、匿名函数

  1. Python 使用 lambda 来创建匿名函数。
  2. lambda 只是一个表达式,不能访问自己参数列表之外或全局命名空间里的参数

语法:lambda[ arg1[ , arg2 [ , arg3…]]] :expression;

九、集合

  • 一个无序不重复元素的集,用{}表示,创建空集合必须使用 set() 而不是 {} ,后者默认表示一个空字典    

十、作用域

  1. 内部函数,不修改全局变量可以访问全局变量
  2. 内部函数,修改同名全局变量,则python会认为它是一个局部变量
  3. 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError

十一、模块

  1.   把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。
  2.   模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,
  3.   以使用该模块中的函数等功能。这也是使用 python 标准库的方法。 

HTML与XML对照学习

thbcm阅读(181)

HTML(HyperText MarkupLanguage):是一种超文本标记语言,超级文本标记语言是标准通用标记语言下的一个利用,也是一种规范,一种标准,它通过标记符号来标纪要显示的网页中的各个部份。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告知阅读器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。

XML(Extensible MarkupLanguage):可扩大标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

URL(Uniform ResourceLocator):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每一个文件都有一个唯一的 URL,它包括的信息指出文件的位置和阅读器应当怎样处理它。锚标签(<a>)是 HTML 中用来定义超链接的源和目标的特性。我们经常使用<a>标签和它的 href 属性来定义一个源超链接。这个 href 属性的值就是目标的 URL。

HTML与XML对照学习

1、其实 HTML与 XML 之间没有非常必定的联系,XML 不是要替换 HTML,实际上 XML 可以视作对 HTML 的补充。

2、XML 和 HTML 的目标不同:HTML 的设计目标是显示数据并集中于数据外观,而 XML 的设计目标是描写数据并集中于数据的内容。

3、与 HTML 相似,XML 不进行任何操作。虽然 XML 标记可用于描写定单之类的项的结构,但它不包括可用于发送或处理该定单和确保按该定单交货的任何代码,其他人必须编写代码来实际对 XML 格式的数据履行这些操作。

4、与 HTML 不同,XML 标记由架构或文档的作者定义,并且是无穷制的。HTML 标记则是预定义的;HTML 作者只能使用当前 HTML 标准所支持的标记。

5、HTML 和 XML 有很多相同的经常使用字符实体,以下图所示:

好的习惯

格式良好的xml文件必须做到以下几点:

1、文档从xml声明开始

<?xml version=”1.0″?>

这段声明之前不能有空格或其它字符,即<?xml version=”1.0″?>必须位于xml文件的第一行,第一列,并且在<?和xml之间不能包括空格。否则都是毛病的。

2、xml只能包括唯一的根元素

正确示例以下:

<?xml version=”1.0″?> <man> <head>head</head> <body>body</body> </man>

错误的示例包括两个根元素<head><body>

<?xml version=”1.0″?> <head>head</head> <body>body</body>

3、标记必须闭合

4、空标记约定

表示方式:<空标记/>

空标记可以有属性

5、必须层层嵌套

子元素必须嵌套在父元素内,不能相互交错。

同层元素必须相互并列,不能相互嵌套。

6、辨别大小写

元素的起始标记和结束标记必须一致。

7、属性设置

属性的设置必须使用引号。

8、特殊字符的表示方法

使用预定义实体援用的方式援用:

错误写法:

<span style=”font-size:24px;”><compare>3<6</compare></span>

正确写法:

<span style=”font-size:24px;”><compare>3  &lt;  6</compare></span>

还有以下优质教程让你成为HTML大神

有趣的JavaScript数组

thbcm阅读(180)

 晚上下班的时候,我们又开始讨论无聊的问题。一个同事提出以下奇异的场景,听说是一道面试题:

var o = { 1:’a’ ,2:’b’ ,length:2 ,push:Array.prototype.push }; o.push(‘c’);

同事:O现在内部的值是什么模样?

我的第一反应是排挤,为何要研究不公道情况下【解释引擎】的行动?但是这类推论有时候又很吸引人,因而我回来的时候仔细思考了下,发现其实很简单。

对 push 这个方法,我条件反射地想到的就是栈,【数据结构的经典栈】中压栈和弹栈操作根据的都是栈顶指针,栈顶指针始终指向栈顶,意味着它会由于压弹栈而自动增减。在 javascript 中的数组中这个指针就是 length。所以在上面的代码中,o.push(‘c’) 就是 o.2 = ‘c'(固然 o.2 不能直接访问,这只是伪代码),所以代码履行完 o 中数据以下:

{ 1:’a’ ,2:’c’ ,length:3 //push操作=>length+1 ,push:Array.prototype.push }

补充说明:

JavaScript 中,万物皆对象,而 javascript 的对象与强类型的对象有一些不同的地方,可以理解成绩是一组键值对的集合。其 array 类型也不例外,它的下标访问就是键访问(不过它的键都是自然数),在上面的例子中赋值给 a 的对象字面量实际摹拟了一个数组(一个下标从一开始的数组)——固然只有部份数组的特性,比如真实的数组在进行键访问的时候,会根据 length 进行越界检查。

只要知道 push 的位置根据的是 length 就能够了,下面种种看似奇怪的现象都好理解:

//1.length不存在,引擎置为
0 var o = { ‘1’:’a’ ,’2′:’b’ ,push:Array.prototype.push }; 
o.push(‘c’);//c {0:’c’,1:’a’,2:’b’,…} 
//2.length为负值,这是个有趣的问题,触及到原码反码和补码【1】 var o = { ‘1’:’a’ ,’2′:’b’ ,length:⑴ ,push:Array.prototype.push }; 
o.push(‘c’);
//c {1:’a’,2:’b’,4294967295:’c’,length:4294967296,…} 
//3.length为字符或对象 
var o = { 1:’a’ ,2:’b’ ,length:’A’ ,push:Array.prototype.push }; 
o.push(‘c’);
//c {0:’c’,1:’a’,2:’b’,length:1,…}
我还以为js解释器会把A转换成ASCII码来给length赋值呢,终究看到了javascript的自由还是有节操的

【1】:计算机中数值都是以补码方式存储的,为了方便运算,⑴的补码与4294967295补码一样,根据 length 的语义,此处是无符号数            

 [⑴]补 = 1111 1111 1111 1111 1111 1111 1111 1111 =  [4294967295]补  
所以这样我们接差对2中的O压入一个对象,key 取的是4294967296,但是数组的最大长度限制为 4294967296,也就是说下标只能取到 4294967295,只会取到 32位 ――对 4294967296 = 1 0000 0000 0000 0000 0000 0000 0000 0000 取后  32 位,就变成了0,所以此次 push 的位置是 0。

联系我们