编程

唠唠SE的集合-07——HashSet

戏子无情 提交于 2020-03-02 02:46:28
7. HashSet 底层数据结构是 哈希表 (元素是链表的数组) 关于这个结构,我觉得有必要用一张图来解释: 哈希表是一个数组,当一个数据(对象)要添加时,先计算对象的hashCode,来确定它应该对应数组的哪个位置,如果那个位置没有数据,则该元素放到对应位置上;如果有数据,则继续调用该对象的equals方法,与该位置的已有数据对比,如果返回true,则HashSet认为这两个数据是一样的,就不允许添加;如果返回false,则在原位置以链表的形式继续向下连接该要添加的数据。 所以说,哈希表依赖于哈希值存储,也就是对象的hashCode方法 HashSet的特性: HashSet不保证迭代的插入顺序性,特别是不保证每次迭代的顺序一致。 比方说下面这段代码,我们做一个String的Set集合,看看每次输出的结果: import java.util.HashSet; public class Test { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("嘿嘿"); set.add("呵呵"); set.add("嗯呐"); set.add("哈哈"); set.add("好的"); set.add("呼呼"); System.out.println(set)

唠唠SE的集合-10——Collections工具类

坚强是说给别人听的谎言 提交于 2020-03-02 02:13:22
10. Collections 集合的工具类,包含很多实用的方法 1,对list进行二分查找:前提该集合一定要有序。 int binarySearch(list,key); //必须根据元素自然顺序对列表进行升级排序 //要求list 集合中的元素都是Comparable 的子类。 int binarySearch(list,key,Comparator); import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(5); list.add(741); list.add(456); list.add(123); list.add(19); Collections.sort(list); // 保证集合有序 System.out.println(Collections.binarySearch(list, 19)); // 1 System.out.println(Collections.binarySearch(list, 741)); // 4

编程第一个Apple Watch程序创建项目

帅比萌擦擦* 提交于 2020-03-01 21:21:25
编程第一个Apple Watch程序创建项目 2.4 编程第一个程序 本节将通过编写第一个程序,为开发者讲解如何添加 Watch 应用对象、运行程序、界面设计、编写代码等内容本文选自 Apple Watch开发快速入门教程 。 2.4.1 创建项目 在第一章中我们讲过一个应用的所有文件都在 Xcode 项目下,所以在编写应用程序之前,首先需要对项目进行创建,创建项目的具体操作步骤如下: ( 1 )单击 Dock 中的 Xcode ,弹出 Welcome to Xcode 对话框,如图 2.11 所示 本文选自 Apple Watch开发快速入门教程 。 图 2.11 创建项目 1 ( 2 )选择其中的 Create a new Xcode project 项目,弹出 Choose a template for your new project: 对话框,如图 2.12 所示。 图 2.12 创建项目 2 ( 3 )选择 iOS|Application 中的 Single View Controller 模板,单击 Next 按钮后,弹出 Choose options for your new project: 对话框,如图 2.13 所示。 图 2.13 创建项目 3 ( 4 )在此对话框中输入项目的名称 Hello 。单击 Next 按钮,弹出选择项目保存位置的对话框,如图 2

ruby的字符串处理函数

不羁岁月 提交于 2020-03-01 08:20:56
1.返回字符串的长度 str.length => integer 2.判断字符串中是否包含另一个串 str.include? other_str => true or false "hello".include? "lo" #=> true "hello".include? "ol" #=> false "hello".include? ?h #=> true 3.字符串插入: str.insert(index, other_str) => str "abcd".insert(0, 'X') #=> "Xabcd" "abcd".insert(3, 'X') #=> "abcXd" "abcd".insert(4, 'X') #=> "abcdX" "abcd".insert(-3, 'X') -3, 'X') #=> "abXcd" "abcd".insert(-1, 'X') #=> "abcdX" 4.字符串分隔,默认分隔符为空格 str.split(pattern=$;, [limit]) => anArray " now's the time".split #=> ["now's", "the", "time"] "1, 2.34,56, 7".split(%r{,\s*}) #=> ["1", "2.34", "56", "7"] "hello".split(//) #

北京尚学堂:Java程序员初学者该具备的基本素质

大城市里の小女人 提交于 2020-03-01 06:07:28
版权声明 :本文为北京尚学堂原创文章,未经允许不得转载。 程序员是一种技术工作,在IT的中有相当重要的地位,从底层硬件通讯协议的建立,到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层发展上各种数据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。 那么Java初学者应该具备什么样的基本素质呢?下面由北京尚学堂的小编为大家揭秘。 Java 初学者应该具备的基本素质 新手走过的路,我们都走过了,别人走过的路,我们也看过了。回首往事,我们有过很多经验和教训,但是,几乎没有人会刻意告知我们应该怎么成长,更没有人专门对我们进行素质上的要求和引导。直到今天我们才知道我们的成长是自发的。它完全取决于我们的工作环境和内容,取决于我们遇到的人和开发的项目。假如我们能够回到从前,我们一定会在年轻的时候更加注重培养自己的素质,让我们成长得更好更快。我将与程序员有关的素质方面的要求进行了一个系统性的归纳,希望这些会对程序员有所启发。 1.激情 激情是程序员的职业标志,在很多情况下,激情具有递减规律。也就是说新手的激情最高,越到最后激情越低,甚至麻木和消失。而成功的程序员几乎都是充满激情的,他们能将激情始终保留在身边。我们要对年轻的程序员说,请保持你们的激情,无论你们在工作中遇到多大的不满、委屈、挫折、失望都不要丧失你们的激情,只要你们有了激情

为什么每个程序员都应该懂点前端知识?

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-29 13:19:47
【编者按】本文作者为 OneAPM 工程师李哲,文章主要介绍前端知识对于编程的必要性。 这里说的前端知识是比较通俗的前端知识,包括网页,桌面或移动端程序的界面,命令行程序的提示等等,即和用户进行交互的那一部分。我的工作经历中,很多人是不在乎这一部分的,更有很多人觉得这个很 low,在年初的时候,还听到一位这样说,“前端无非就是 Copy Paste”,在前端技术发展这么迅猛的现在,还能说出这样的话,可见这个人的眼界是多么的狭小了,连冲他苦笑的时间都腾不出来。 由于工作内容的关系,大部分情况都是在 Linux 的虚拟终端下,也就是敲击键盘输入各种命令,等着系统的反馈。我使用过很多更好用的命令行程序的替代品,比如 top 命令的替代 htop,看看 top 和 htop 的区别吧,很明显 htop 要更好用。 虚拟终端用了那么多年,也没有什么实质上的改进,只是多了几种 shell 的变种,比如 zsh,fish 等等。实际上有很多人在做这方面的尝试,原因也就是现在的虚拟终端太难用了。让我们看看 black-screen 是什么样子的。black-screen 基于 electron 开发,也就是 github atom 的底层引擎。做的还不是完全兼容,能满足一般使用吧。 即使在虚拟终端这个领域,大家都在追求友好的界面设计,以及交互的友好。如果你认为 black-screen

从把3000行代码重构成15行代码谈起

核能气质少年 提交于 2020-02-29 02:48:47
如果你认为这是一个标题党,那么我真诚的恳请你耐心的把文章的第一部分读完,然后再下结论。如果你认为能够戳中您的G点,那么请随手点个赞。 把三千行代码重构为15行 那年我刚毕业,进了现在这个公司。公司是搞数据中心环境监控的,里面充斥着嵌入式、精密空调、总线、RFID的概念,我一个都不懂。还好,公司之前用Delphi写的老客户端因为太慢,然后就搞了个Webform的替代,恰好我对Asp.Net还算了解,我对业务的不了解并不妨碍我称成为这个公司的一个程序员。小公司也有小公司的好,人少,进去很快负责代码开发。我当然也就搞这个数据中心智能管理系统啦。 这个系统非常的庞大,尤其牛逼的是支持客户端组态,然后动态生成网页,数据还能通过Socket实时监控(那时我还真就不懂网络编程)。这个对于当时的我来说,真真是 高、大、上 呐!!当时跟着了解整个系统大半个月才算能够调试,写一些简单的页面。 在维护系统的过程中,时不时要扩展一些功能,也就接触了下面这个类: 图片有压缩,点击这里查看清晰的原图。 看到没有,就是当年最最流行的三层架构的产物,对于刚出茅庐的毛头小子来说,这是多么专业的文件头注释,还有反射也就算了,这构造函数还能静态的,还能私有的?那时刚接触这么高大上的代码的我,瞬间给跪了! 但是,类写多了,我就感觉越来越别扭,就是下面这段代码: 图片有压缩,点击这里查看清晰的原图。 每增加一个表

Linux命令、编辑器与Shell编程

天大地大妈咪最大 提交于 2020-02-28 19:13:24
Linux命令、编辑器与Shell编程 本书以实用为原则,以 Linux系统管理为核心,在深入剖析 Linux系统运行原理的基础上,重点介绍 了 Linux系统管理中常见命令的各种用法、编辑器的使用及利用 Shell脚本管理 Linux系统等内容。 对其内容详细阅读 来源: oschina 链接: https://my.oschina.net/u/856019/blog/159265

如何开发自己的嵌入式系统

走远了吗. 提交于 2019-12-29 19:22:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 多数Linux系统是在PC平台上运行,然而Linux作为嵌入式系统也是非常稳定的。本文描绘了一个嵌入式系统的概览,并展示嵌入式系统产品是如何使用Linux的。 嵌入式系统比摩西还老的故事 电 脑用于控制设备或嵌入系统的历史几乎电脑自身的历史一样长。在通讯领域,六十年代晚期,电脑被用于电子电话交换机,称为“存储程序控制”系统。“电脑”这 词那时并不普遍,存储程序指内存装有程序和例程信息。存储控制逻辑,而不是将其固化在硬件中,在当时确实是突破性的。今天,我们认为它本来就应如此。 那时的电脑是为每一个应用而定制的,按今天的标准,它们是一些不正常的、由奇怪的特殊指令和I/O设备集成在一部电脑中。 微处理器通过提供构建大系统模块的小型、低成本、CPU引擎改变了这一切。它提出了外设通过总线联接的固定硬件架构及称为编程的一般编程模型。 软件也随着硬件提出。最初,编写和测试软件只有简单的编程开发工具。每个项目实际运行的软件通常来自于草稿的修改。编程常用汇编语言或宏语言,因为编译器常常有缺陷和缺乏完善的调试工具。软件构建模块和标准化库只是到了七十年代才流行起来的概念。 嵌 入式系统的商品化操作系统在1970年代后期才出现,许多是用汇编语言写成的,并且只能用于特定的微处理器,当微处理器被淘汰时,它的操作系统除非为新处 理器重写

自学的IT程序员通常缺少哪些技能

拟墨画扇 提交于 2019-12-12 14:26:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。 马克•吐温在他的写作生涯中,常遇到自学的作家,他对于他们的不谦虚而感到非常厌恶。他总结道: “自学的人通常很少能准确懂得知识,而且他所懂的内容,还不到有老师指导的人所学到的十分之一。除此之外,他还会炫耀,去欺骗其他不思考的人,按照他从前所做的那样去做。” 庆幸的是,在2016年,除去那些生活在没有图书馆的乡村,“自学成才”的人实际上已经不多了。事实上不都是从老师那里学来的吗?我们在工作的时候,不也是依赖于那些写了技术书籍,有思想性的文章,和 API 文档的人吗?​ 那么自学的IT程序员到底有哪些不足呢? 算法 经典的计算机科学在这里。没有算法知识的编程就像只有一种锯的木工:你可以完成这项工作,但是它需要很长时间。 你可以把算法看成一种规律,当你学习写他们的时候,你正在做的是用规律去解决问题。正在使用数据结构、模式和逻辑步骤。 当你不知道如何去规划你的想法的时候,你不知道如何去写算法。 除非你学习了算法,否则你不光不会写算法,你也不知道有多少算法其他人已经写了。 我花了四天试图去解决如何完成一个队列。当我解决的时候,特别为自己感到自豪。直到我发现B.R堆在1963年已经解决它。 设计模式 这个来自教育或者经验,有多种方式构建你的代码