为什么要幼儿园家长关注的问题技术问题

比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
2016年需要关注的十大网络安全问题
关键字:网络威胁
  据明尼苏达州立大学穆尔海德分校的计算机学副教授Andrew Chen声称:“好比是喀迈拉(狮头、羊身、蛇尾的喷火妖怪)。一开始时它似乎很强大,随后变得很诱人,最后变得很危险。”Chen博士对当前互联网所持的看法很难驳斥,2016年看起来更是如此。本文阐述了几个原因。
  1. 各个国家的间谍活动逐渐升级。
  《塔林手册》(Tallinn Manual)由20位网络防御专家共同撰写,由剑桥大学出版社出版,它对网络间谍所下的定义是“一种秘密或打着幌子进行的活动,利用网络功能收集,企图将信息传敌对方。”
  2016年会出现更多“离奇惊险”的间谍活动。许多国家会监视地球上的每个人。所收集的将用于获得经济优势,以及用作地缘政治冲突中的数字化武器。
  2. 政府会加大向公司获取信息的要求。
  现已失效的《美国-欧盟港协议》已经造成了余波。据EU Business报道,“爱尔兰高等法院已下令爱尔兰数据保护专员认真考虑,是否暂停将用户数据从欧洲传送到美国。”
  各国政府会继续要求公司企业交出敏感信息,导致企业组织不知道该信任谁、自己可能违反了什么规章制度。
  3. 许多国家会采取措施,控制其境内的互联网。
  由于不知道该信任谁,专家们表示,每个国家会努力控制其境内的互联网。Discern Analytics公司总经理兼斯坦福大学顾问副教授Paul Saffo写道:“分裂割据全球互联网的压力会依然存在,并带来新的不确定因素。各国政府在阻止本国网民访问不受欢迎的网站方面会变得更娴熟。”
  4. 如果运用到安全领域,和分析技术的帮助不会很大。
  大数据和分析技术正在慢慢进入到安全领域。不过有个问题要注意。论坛(ISF)全球副总裁Steve Durbin告诉《eWeek》杂志:“如果企业组织盲目地相信大数据,会基于错误的或不完整的数据集做出战略决策。想避免这种情况,就要概述运用大数据分析技术解决信息安全问题的方法。”
  此外,Gartner的研究副总裁Anton Chuvakin博士提到:“要是从投入中得到好处的可能性不大,就别光冲着大数据的魅力而花钱;如果“好处”的定义还不明确,更是如此。”
  5. 移动应用程序会成为首选目标。
  移动应用程序正在成为首选目标;美国波耐蒙研究所(Ponemon Ins
  titute)决定分析一下原因。Larry Ponemon博士提到:“在接受调查的400多家企业组织中DD近40%是《财富》500强企业,差不多有40%没在扫描其应用程序中的代码,查找安全漏洞,这无异于向潜在敞开了大门,敏感的用户数据、企业数据和客户数据岌岌可危。普通企业组织测试的自行开发的移动应用程序连一半都不到,33%的受访企业从来没有测试过应用程序。”
  预计这种情况不会很快就会发生变化。
  6. 加密起不到威慑作用,也不会起到威慑作用。
  在过去几个月,政府执法部门一直要求将后门添加到加密软件中。不出所料,安全专家们奋力反击,看来他们赢了。不过,有些人不是那么确信DD也许这只是烟幕弹而已。
  Andy Greenberg在《连线》杂志上发表了一篇文章:《警察不需要加密后门,就能进入你的》,他采访了几位安全专家,询问政府部门是否果真需要后门。美国公民自由联盟(ACLU)的首席技术专家Chris Soghoian告诉Greenberg:“尽管联邦调查局(FBI)在去年大放厥词,但实际情况并不如他们所说的那么可怕。科技公司提供给我们的那种加密旨在保护我们,以防窃贼窃取我们的电脑。它的目的并不是阻止政府特工试图窃取你的数据,不管对方有没有法院指令。”
  7. 松懈的安全将清晰可见。
  物联网设备攻击即将来临,不过不是今年。Michael Fimin在Netwrix Community专栏中写道:“我们还没有预计针对物联网的攻击会变得很普遍。大多数攻击可能是‘白帽’黑客行为,报告安全漏洞和概念证明漏洞。”
  2016年就不会是这样,如果坏人读到像John Dixon撰写的《谁会挺身而出、保护物联网安全?》这类文章更是如此。
  Dixon提到:“如果今天的科技巨头们不挺身而出、保护物联网安全,那么这个重任会落在大批初创公司的肩上,行业的目前发展主要靠它们在推动。Gartner估计,到2017年,一半以上的物联网产品和服务将由成立不到三年的公司开发。此外,虽然其中一些新来者可能拥有强大的,但许多初创公司还是缺少实施所需的严密安全需要具备的知识或能力。”
  8. 需要更多“合格”的安全专业人士。
  说到安全,最好的防御者恰恰是最好的攻击者,这可能出人意料;而眼下,严重缺乏合格的防御者。不过现在有一个更紧迫的问题。据ISF全球副总裁Steve Durbin声称,市面上还没有足够多合格的安全专业人士。这种情况在2016年不会有所改善,企业和政府部门会争抢那些合格的专业人士。
  9. 对新一代来说,安全性不那么重要。
  下一代人对待安全和隐私的看法会把上一代人吓一大跳。比如说,据Ben Rossi声称,公司的一项研究发现,如果缺少信息共享和公司抵御自带设备(BYOD),Z一代当中30%会颇为沮丧。每个人都在寻求一种折中办法,不过在2016年找不到。
  10. 方便会继续压倒隐私和安全。
  分析方便压倒隐私和安全的文章已写过了不少。公司的研究员Fred Baker转入正题,他说:“安全和隐私方面的问题已得到了显著改善,不过仍然是威胁,主要是由于人性并没有发生变化,总是有那么一小撮人想伤害别人。”
相关文章:
[ 责任编辑:小石潭记 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte让天下没有难学的技术
《JAVA8开发指南》为什么你需要关注 JAVA8
《JAVA8开发指南》为什么你需要关注 JAVA8
作者:Raoul-Gabriel Urma
译者:二进制的蛇
代码的可读性
JAVA8特性的快速指南
JAVA8:为什么你需要关注?
JAVA已经更新了!在 2014 年 3 月,JAVA发布了新版本-JAVA8,JAVA8 引入的一些新特性可能会改变你日常中基本的编码方式。但不用担心,这本简洁的指南会带着你掌握一些要领,现在你就可以开始阅读。
第一章列举了 JAVA8 中增加的主要功能概况。接下来的两章则关注 JAVA8 的主要特性: lambda 表达式 和streams(流)。
驱动 JAVA8 改进的两大动机:
代码可读性
更加简化的多核支持
代码可读性
JAVA 是比较繁琐的,这导致了可读性的降低。换句话说,它需要很多代码才能表达一个简单的概念。
举个例子:给一个票据列表按数值递减排序。在 JAVA8 之前,你需要写这样写代码:
Collections.sort(invoices,new Comparator&Invoice&(){
public int compare(Invoice inv1,Invoice inv2){
return Double.compare(inv2.getAmount(),inv1.getAmount());
像这种编码方式,你需要关注很多关于如何排序的小细节。换句话说,它很难对上面陈述的问题(票据排序问题)用一个简单的解决方案来描述。你需要创建一个 Comparator(比较器) 对象来定义如何对两个票据进行比较。为了实现比较,你需要提供一个 compare() 方法的实现。在阅读这段代码的时候,你必须花费较多而的时间来理解实现的细节而不是理解实际的问题描述。
在 JAVA8 中,你可以用下面这段代码来进行重构:
invoices.sort(comparingDouble(Invoice::getAmount).reversed());
现在,问题描述得清晰明了。(不要担心新的语法,我将会进行一个简短的介绍)。这就是你为什么应该关注 JAVA8 的原因,它带来了新的语言特色和API的更新,能让你写出更加简洁可读的代码。
此外,JAVA8 引入了一种新的API,叫做 Streams API。它可以让你写出可读性强的代码来处理数据。Streams API 支持几种内建的操作,以更简单的方式来处理数据。例如,在商业运营环境中,你可能希望产生一份日结报告用来过滤和聚合多个部门的票据信息。幸运的是,通过 Streams API,你可以不用去担心如何实现这种查询。这种方法和你使用SQL相似,事实上,在SQL中你可以制定一个查询而不用去关心它内部的实现。例如,假设你想要找出所有票据中数据大于1000的票据单号:
SELECT id FROM invoices WHERE amount & 1000
通常把这种查询的书写风格称作为声明式编程。这就是你将用 Streams API 解决这个问题的方式:
List&Integer& ids = invoices.stream()
.filter(inv-&inv.getAmount & 1000 )
.map(Invoice::getId)
.collect(Collections.toList());
现在不要关注这些代码的细节,在第 3 章你会更深入地了解 Streams API。现在,把 Streams API 看作是一种新的抽象概念,以更好的可读性来处理数据的查询。
JAVA8 中第二个大的改动就是多核处理时所不可缺少的。在过去,你的电脑只有一个处理单元。要想更快地运行一个应用程序通常意味着提升处理单元的性能。不幸的是,处理单元的处理速度已经不再提升。今天,绝大多数的电脑和移动设备都有多个处理单元(简称核)在并行工作。应用程序应该利用不同的处理单元来提升性能。JAVA 应用程序中经典的实现方式就是利用线程。不幸的是使用线程往往是困难和容易出错的,一般是为专家准备的。JAVA8 中的 Streams API 可以让你很简单地对数据查询进行并发处理。例如,你仅仅需要用 parallelStream() 替代 stream() 即可实现先前代码的并发运行:
List&Integer& ids = invoices
.parallelStream()
.filter(inv-&inv.getAmount & 1000 )
.map(Invoice::getId)
.collect(Collections.toList());
在第 3 章,我会探讨使用 parallel streams 的细节及其最佳实现。
JAVA8特性的快速指南
这部分会提供 JAVA8 一些主要的新特性的概述,并附带一些代码例子,向你展示一些可用的概念。接下来的两章会重点描述 JAVA8 的两大重要特性:lambda 表达式 和 streams。
lambda 表达式
lambda 表达式让你用一种简洁的方式去避免一大块的代码。例如,你需要一个线程来执行一个任务。你可以创建一个 Runnable 对象,然后做为参数传递给 Thread:
Runnable runnable =new Runnable(){
public void run(){
System.out.println(“Hi”);
new Thread(runnable).start();
另一种办法,使用 lambda 表达式,你可以用一种更加易读的方式去重构先前的代码:
new Thread(()-&System.out.println(“Hi”)).start();
在第 2 章,你将会学习关于 lambda 表达式的更多重要的细节。
方法引用联合 lambda 表达式组成了一个新的特性。它可以让你快速的选择定义在类中的已经存在的方法。例如:你需要忽略大小写去比较一个字符串列表。一般地,你将会像这样写代码:
List&String& strs = Arrays.asList(“C”,”a”,”A”,”b”);
Collections.sort(strs,new Comparator&String&(){
public int compare(String s1,String s2){
return s1.compareToIgnoreCase(s2);
上面展示的这段代码可谓是极度详细。毕竟你需要的只是 compareToIgnoreCase 方法。利用方法引用,就可以明确地表明应该用 String 类中定义的 compareToIgnoreCase 方法来进行比较操作:
Collections.sort(strs,String::compareToIgnoreCase);
String::compareToIgnoreCase 这部分代码就是一个方法引用。它使用了一种特殊语法 :: (关于方法引用的更多细节会在接下来的章节中描述)。
几乎每一个 JAVA 应用程序都会创建和处理集合。它们是许多编程任务中的基石,可以让你聚合及处理数据。然而,处理集合过于繁琐而且难于并发。接下来的这段代码会说明处理集合会是多么的繁琐。从一个票据列表中找到训练相关的票据ID并按票据的数值排序:
List&Invoice& trainingInvoices = new ArraysList&&();
for(Invoice inv:invoices){
if(inv.getTitle().contains(“Training”)){
trainingInvoices.add(inv);
Collections.sort(trainingInvoices,new Comparator&Invoice&(){
public int compare(Invoice inv1,Invoice inv2){
return inv2.getAmount().compareTo(inv1.getAmount());
List&Integer& invoiceIds = new Arrays&&();
for(Invoice inv : trainingInvoices){
invoiceIds.add(inv.getId());
JAVA8 引进了一种新的抽象概念叫做 Stream ,可以让你以一种声明式的方式进行数据的处理。在 JAVA8 中你可以使用 streams 去重构之前的代码,就像这样:
List&Integer& invoiceIds = invoices.stream()
.filter(inv -& inv.getTitle().contains(“Training”))
.sort(comparingDouble(Invoice::getAmount).reversed())
.map(Invoice::getId)
.collect(Collections.toList());
另外,你可以通过使用集合中 parallelStream 方法取代 stream 方式来明确的并发执行一个 stream(现在不要关注这段代码的实现细节,你将会在第3 章中学到更多关于 Streams API 的知识)。
JAVA8 中对接口进行了两大改造,使其可以在接口中声明具体的方法。
第一、JAVA8 引入了默认方法,它可以让你在接口声明的方法中增加实现体,作为一种将 JAVA API 演变为向后兼容的机制。例如,你会看到在 JAVA8 的 List 接口中现在支持一种排序方法,像下面这么定义的:
default void sort(Comparator&? super E& c){
Collections.sort(this,c);
默认方法也可以当做一种多重继承的机制来提供服务。事实上,在 JAVA8 之前,类已经可以实现多接口。现在,你可以从多个不同的接口中继承其默认方法。注意,为了防止出现类似 C++ 中的继承问题(例如钻石问题),JAVA8 定义了明确的规则。
第二、接口现在也可以拥有静态方法。它和定义一个接口,同时用一个内部类定义一个静态方法去进行接口的实例化是同一种机制。例如,JAVA 中有 Collection 接口和 定义了通用静态方法的 Collections 类,现在这些通用的静态也可以放在接口中。例如,JAVA8 中的 stream 接口是这样定义静态方法的:
public static &T& Stream&T& of (T…values){
return Arrays.stream(values);
新的日期时间 API
JAVA8 引入了一套新的日期时间 API ,修复了之前旧的 Date 和 Calendar 类的许多问题。这套新的日期时间 API 包含两大主要原则:
领域驱动设计
新的日期时间 API 采用新的类来精确地表达多种日期和时间的概念。例如,你可以用 Period 类去表达一个类似于 “2个月零3天(63天)”,用 ZonedDateTime 去表达一个带有时间区域的时间。每一个类提供特定领域的方法且采用流式风格。因此,你可以通过方法链写出可读性更强的代码。例如,接下来的这段代码会展示如何创建一个 LocalDateTime 对象而且增加 2小时30分:
LocalDateTime coffeeBreak = LocalDateTime.now()
.plusHours(2)
.plusMinutes(30);
Date(日期) 和 Calendar(日历)的其中一个问题就是他们是非线程安全的。此外,开发者使用 Dates (日期) 作为他们的API的一部分时,Dates(日期)的值可能会被意外的改变。为了避免这种潜在的BUG,在新的日期时间 API 中的所有类都是不可变的。
也就是说,在新的日期时间 API 中,你不能改变对象的状态,取而代之的是,你调用一个方法会返回一个带有更新的值的新对象。下面的这段代码列举了多种在新的日期时间 API 中可用的方法:
ZoneId london = ZoneId.of(“Europe/London”);
LocalDate july4 = LocalDate.of(2014,Month.JULY,4);
LocalTime early = LocalTime.parse(&#”);
ZonedDateTime flightDeparture = ZonedDateTime.if(july4,early,london);
System.out.println(flightDeparture);
LocalTime from = LocalTime.from(flightDeparture);
System.out.println(from)
ZonedDateTime touchDown = ZonedDateTime.of(july4,
LocalTime.of(11,35),
ZoneId.of(“Europe/Stockholm”));
Duration flightLength = Duration.between(flightDeparture,touchDown);
System.out.println(flightLength);
ZonedDateTime now = ZonedDateTime.now();
Duration timeHere = Duration.between(touchDown,now);
System.out.println(timeHere);
这段代码会产生一份类似于这样的输出:
T08+01:00[Europe/London]
PT269H46M55.736S
CompletableFuture
JAVA8 中引入了一种新的方式来进行程序的异步操作,即使用一个新类 CompletableFuture 。它是旧的 Future 类的改进版,这种灵感来自于类似 Streams API 所选择的设计(也就是声明式的风格和流式方法链)。换句话说,你可以使用声明式的操作来组装多种异步任务。下面这个例子需要同时并发地查询两个独立(封闭)的任务。一个价格搜索服务与一个频率计算交织在一起。一但这两个服务返回了可用的结果,你就可以把他们的结果组合在一起,计算并输入在GBP中的价格:
findBestPrice(“iPhone6”)
.thenCombine(lookupExchangeRate(Currency.GBP),this::exchange)
.thenAccept(localAmount -& System.out.printf(“It will cost you %f GBP \n”,localAmount));
private CompletableFuture&Price& findBestPrice(String productName){
return CompletableFuture.supplyAsync(() -& priceFinder.findBestPrice(productName));
private CompletableFuture&Double& lookupExchangeRate(Currency localCurrency){
return CompletableFuture.supplyAsync(() -& exchangeService.lookupExchangeRate(Currency.USD,localCurrency));
JAVA8 中引入了一个新的类叫做 Optional。灵感来自于函数式编程语言,它的引入是为了当值为空或缺省时你的代码库能容许更好的模型。
把它当作是一种单值容器,这种情况下如果没有值则为空。Optional
已经在可供选择的集合框架(比如 Guava)中可用,但现在它作为 JAVA API 的一部分,可用于JAVA中。Optional 的另一个好处是它可以帮助你避免空指针异常。事实上,Optional 定义了方法强制你去明确地检查值存在还是缺省。下面这段代码就是一个例子:
getEventWithId(10).getLocation().getCity();
如果 getEventWithId(10) 返回 NULL,那么代码就会抛出 NullPointerException(空指针异常)。如果 getLocation() 返回 NULL,它也会抛出 NullPointerException(空指针异常)。换句话说,如果任何一个方法返回 NULL,就会抛出 NullPointerException(空指针异常)。你可以采用防御性的检查来避免这种异常,就像下面这样:
public String getCityForEvent(int id ){
Event event = getEventWithId(id);
if( event != null ){
Location location = event.getLocation();
if(location != null ){
return location.getCity();
return “ABC”;
在这段代码中,一个事件可能会有一个与之关联的地点。然而,一个地点总是会与一个与之关联的城市。不幸的是,它通常容易忘记去检查值是否为 NULL 。此外,这段代码太详细而且难于跟踪。使用 Optional 你可以用更加简洁清晰的方式去重构这段代码,就像这样:
public String getCityForEvent(int id){
Optional.ofNullable(getEventWithId(id))
.flatMap(this::getLocation)
.map(this::getCity)
.ofElse(“TBC”);
在任何时候,如果方法返回一个空的 Optional 对象,你就会得到默认值 TBC。
原创文章,转载请注明: 转载自本文链接地址:
JAVA研发工程师 at YY-JAVA研发工程师热爱技术、热爱分享、热爱交流轻度强迫症、完美主义Git:https://github.com/Json-Liu
Latest posts by 二进制的蛇 ()
Related posts:
(3 votes, average: 3.00 out of 5)
Loading...

我要回帖

更多关于 幼儿园家长关注的问题 的文章

 

随机推荐