技术文章

阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁

阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 0x00 前言 随着物联网科技的飞速发展, 各类IOT设备都通过使用无线技术BTLE; ZigBee; WIFI; 6LoWPAN等来实现万物互联. 但随之而来的安全及个人用户隐私问题也越来越敏感. 汪汪将在这篇文章中分享一个低功耗蓝牙智能锁的分析案例. 希望能对IOT安全研究起到抛砖引玉作用. BTLE 俗称低功耗蓝牙, 比传统的蓝牙更能控制功耗和成本. 因此成为当下 IOT 产品中使用非常频繁的技术. 比如小米智能手环; 飞利浦的HUE 智能灯, 甚至还有羞羞的蛋蛋系列都是通过BTLE 来完成联接的. 据说BTLE设备的年出货量在过去15年内增加了1000倍,已经达到了30亿的水平,在未来的4~5年内还将增加到50亿. ...

Python运算符

一、基本概念 1、Python语言支持的运算符类型   算数运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级 2、计算顺序     运算符优先级表决定了哪个运算符在别的运算符之前计算,若是要改变计算的顺序,使用圆括号。 3、结合规律   运算符通常由左向右结合,即相同优先级的运算符按照从左向右的顺序计算。 In [2]: 3*4-2+6/2Out[2]: 13In [3]: 3*4-(2+6)/2Out[3]: 8 二、运算符优先级表 ...

Java基本功之Reference详解

有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构。说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚。于是,事情的另一面让人忽略了。偏巧,我是一个喜欢探究底层实现的Java程序员,虽然我的喜好并非纯正咖啡,剑走偏锋却别是一番风味。      Reference Java世界泰山北斗级大作《Thinking In Java》切入Java就提出“Everything is Object”。在Java这个充满Object的世界中,reference是一切谜题的根源,所有的故事都是从这里开始的。 ...

Kotlin语言和Java语言100%互通

5月18日消息,谷歌在今天的I/O 2017开发者大区会上宣布了安卓开发全面支持Kotlin编程语言。Kotlin是由JetBrain(Android Studio/IntelliJ的开发公司)公司开发的面向对象编程语言,支持安卓和网页开发。在之前这个语言就已经支持了安卓平台开发,但是直到今天谷歌开发者大会上才宣布对该语言的全面支持和维护。 年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元。随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift。 具体来说,Kotlin语言正式成为安卓开发的一级编程语言。 ...

一个俄罗斯方块程序(非案例版)

 我们学面向对象的时候曾经做过俄罗斯方块这个案例,当时没有做完,我也不知道有《JAVA经典项目集锦》这个教材(做飞机大战的时候老师才告诉我们有这个书)。我当时想把它完成,可是自己又水平不够,不会JFrame,不会操纵图片,不会定时器,不会监听键盘,感觉难以下手。所以我在网上找了一个别人做的俄罗斯方块程序,把它小幅修改了一下,分享给大家。即使你对我们已经做过的俄罗斯方块项目已经非常熟了,也可以看看这个程序。这个程序比起来《JAVA经典项目集锦》上面完整版的俄罗斯方块项目的优点在于精简,它就是为了实现俄罗斯方块运行时的效果而写的程序,能少写则少写,最终不到300行完成这个程序。而我们的项目为了教学,刻意使用了很多的类,使得最终程序很长(我没有敲一遍,估计不算注释要有600行)。这个程序节省篇幅的地方主要就在于它只用了一个三维数组,36行代码就把7种形状,4种旋转状态全部包括进去了,而我们的案例中采用了1个类(包括8个内部类),总共200行代码才做到同样的效果,而且,对这些类的操作也比对一个数组操作要更加麻烦,又在操作这些形状上拉开200行代码的差距。因此,虽然面向对象有很多好处,但是滥用面向对象也会招致很多不必要的麻烦,比如编写代码篇幅剧增,使得编程花费时间增加。...

如何使按秒输出当前时间的程序不跳秒

  学习线程的时候,做了一个按秒显示当前时间的小程序。这个程序不难, 但提到这个小程序有缺陷,就是你仔细盯着输出结果看,有时候会发现显示 的时间突然跳了一秒,比如从19:56:42 跳到19:56:44。 我对这个现象产生的原因很感兴趣,于是研究了一下它是如何产生的以及研究了一下解决办法。 原程序如下: import java.text.SimpleDateFormat;...

如何选择Java的分支?

  自诞生之日起,Java 语言就处于不断的发展中。目前,其主要分为以下 3 个分支。 Java EE:Java Enterprise Edition 的缩写,主要用于企业级网站开发。由于其卓越 的性能,被世界 500 强企业广泛使用。 Java SE:Java Standard Edition 的缩写,主要用于桌面应用开发,常见软件包括...

java中final 参数可以修改吗?

  参数被修饰成 final,意味着该参数不能在方法体中被修改,所以一旦修改了方法体中的 final 参数,程序将无法通过编译。例如:   package com.mingrisoft;public class Something {...

程序员必须要掌握的十大经典算法

  算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log )次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。...

java泛型中 super T和 extends T的区别

  经 常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。...

java程序员如何写出漂亮的代码

  存在问题: 好多小伙伴对编码的格式作用模糊,以为只要完成功能就行,其实这种观点是错误的,一定要重视代码规范,不然你哭的地都找不到。 如何实施:...

java程序员必看:如何从菜鸟蜕变成高手

  作为程序员我们应该知道什么,这是很重要的。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。 1. 扎实的基础。 数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。...
青岛软件培训

可能你正在寻找一家靠谱的IT培训机构,学习一些专业的软件开发技术,找一份得体的工作。恰巧我们就是一家踏踏实实做教育的IT人才培养机构,我们咨询电话是 0532-85025005,如果你确实对IT感兴趣,我们不妨交流一下。

申请免费试听课程