首页 文章 精选 留言 我的

精选列表

搜索[记忆机制],共10000篇文章
优秀的个人博客,低调大师

IOS的消息传递机制,使用NSNotificationCenter进行通信,很实用

概述 在这个文档中,我们将讨论2个不相关的或者彼此之间不知道对方id的对象是如何通信的.所有的例子都是基于Objective-C的,这篇文章的关注点是Iphone开发.这个手册对那些在iphone开发和想要提高软件的易用性,扩展性的人将非常有用. 下面,我们将讨论具体的项目细节(http://www.hivestudio.cat/goldCube.zip),这个例子是一个小的OpenGL视图程序,你可以对金色正方体进行翻转.图片 使用者可以用"Rotate X""Rotate Y"和"Rotate Z"进行操作. 当使用者点击"Rotate X"按钮,"ViewController"中的“button1()”函数将被调用.然后"ViewController"将通知“OpenGLView”,告诉他,用户要进行翻转物体,问题是“ViewController”并没有任何"OpenGLView"实例,唯一可行的方法是使用"NotificationCenter"进行通信. 下面是使用“NotificationCenter”对"ViewController"和"OpenGLView"进行通信的步骤: 1) 在OpenGLView中添加消息的观察者. OpenGLView.m - (void)prepareOpenGL { //1 -> Adding OpenGLView as an observer.[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(RotateX)name:@"button1"//表示消息名称,发送跟接收双方都要一致object:nil]... } 2)在"ViewController"中发送消息. viewController.m - (IBAction)button1:(id)pId; { //3 -> SENDING THE MESSAGE[[NSNotificationCenter defaultCenter] postNotificationName:@"button1" object:self];//注意object属性 } 3)"OpenGLView"相应对此消息的对应方法. OpenGLView.m //2 à IMPLEMENTING THE METHOD - (void) RotateX { NSLog(@"rotateX"); dAnlgeX=dAnlgeX+10; } 这些步骤允许我们在"OpenGLView"和"viewController"之间传递消息 同时在dealloc方法,将observer从notification center中移除 - (void)dealloc { [self setEmployees:nil]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc removeObserver:self]; [super dealloc]; } 本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2398229.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android广播机制(两种注册方法)与 中断广播

两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。 在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候我们要干什么,这就要我们自己来实现,不过我们可以搞一个信息防火墙。具体的代码: public class SmsBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Contextcontext,Intentintent) { Bundlebundle = intent.getExtras(); Object[]object = (Object[])bundle.get( " pdus " ); SmsMessagesms[] = new SmsMessage[object.length]; for ( int i = 0 ;i < object.length;i ++ ) { sms[ 0 ] = SmsMessage.createFromPdu(( byte [])object[i]); Toast.makeText(context, " 来自 " + sms[i].getDisplayOriginatingAddress() + " 的消息是: " + sms[i].getDisplayMessageBody(),Toast.LENGTH_SHORT).show(); } // 终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。 abortBroadcast(); } } 当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED 我们就可以把广播接收器注册到系统里面,可以让系统知道我们有个广播接收器。这里有两种,一种是代码动态注册: // 生成广播处理 smsBroadCastReceiver = new SmsBroadCastReceiver(); // 实例化过滤器并设置要过滤的广播 IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); // 注册广播 BroadCastReceiverActivity. this .registerReceiver(smsBroadCastReceiver,intentFilter); 一种是在AndroidManifest.xml中配置广播 <? xmlversion="1.0"encoding="utf-8" ?> < manifest xmlns:android ="http://schemas.android.com/apk/res/android" package ="spl.broadCastReceiver" android:versionCode ="1" android:versionName ="1.0" > < application android:icon ="@drawable/icon" android:label ="@string/app_name" > < activity android:name =".BroadCastReceiverActivity" android:label ="@string/app_name" > < intent-filter > < action android:name ="android.intent.action.MAIN" /> < category android:name ="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > <!-- 广播注册 --> < receiver android:name =".SmsBroadCastReceiver" > < intent-filter android:priority ="20" > < action android:name ="android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter > </ receiver > </ application > < uses-sdk android:minSdkVersion ="7" /> <!-- 权限申请 --> < uses-permission android:name ="android.permission.RECEIVE_SMS" ></ uses-permission > </ manifest > 本文转自java豆子博客园博客,原文链接:http://www.cnblogs.com/error404/archive/2011/08/03/2126034.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

android-手机内存分配和回收机制研究

Theory: There are two kinds ofmemory allocationmechanism : (1)Somelargeapplication ,like oracle client ,world of warcraft game : ( We can think about it likeBuffet(自助餐),if you paid, you can control what you eat and do not need to pay anymore ) This kind of application will have aminimum configurationof memory ( for example ,the WOW game will have at least 1gigabyte memory) ,this minimum memory is the largest estimation of the memory that it may use,it will never ask the Operation System for extra memory when runningit .(For example ,the wow.exe only need 400m memory ,the left memory are reserved for temp files ,swap files ,object files and so on ,so even it only needs 400M,the rest 600M are unavailable for other application .) So this kind of application has only two status: (Can run / cannot run),Once it runs ,it will always run and do not need to worry about the memory . (2)Small application: Most of the normal application are acted like this way ,it applies for a small memory ,and when it runs and needs more memory ,it asked the Operation system for more memory. (we can think it as “Choose dishes from menu”(点菜),if we needs more ,we order more ,pay more) So this kind of application will have three status: (cannot run /Can run/ can run but future the memory used out) During running ,it needs more memory and applied from OS ,so maybe onetime ,the OS cannot supply enough memory, this application will shutdown. Our issue: Based on the above theory ,we can take a look at the problem ,why sometimes ,the application will shut down if we scroll the screen very frequently in search result page. Because android mobile application is usingMechanism 2 Problem:when we go to the search result page ,if we scroll down the screen very frequently ,the application thread will shut down because of the memory used out. Phenomenon: scroll down very frequently ->Dalvik VM used out exception Reason: The Heap memory can be divided into parts,one is reserved for java objects ,the other is reserved for native C objects.(They cannot mix together) If we scroll up /down the screen very frequently ,the new native objects are created andONLY the native heap memory are recycled. And the recycling speed is much slower than the allocating memory speed ,that’s why the heap memory will used out. From the log ,we can see ,that only native heap memory are recycled (GC_EXTERNAL_ALLOC stands for the native heap memory recycle) And most the memory recycled are small( less than 150KB) ,that’s because android based on “slab” mechanism to allocate memory ,and the slab has a limit size. But what the size of the native heap memory it allocated when a new native c object created? The answer is320KBin our test So,allocate more and recycle less ,at last ,the memory will used out and the application process will die. Solution; When configure the emulator ,pleaseset the RAM(SD card) to be a large number ,and restart the emulator. Go to <ANDROID_ROOT>\.android\avd\<Your avd>\config.ini ,change thesdcard.size 本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/835923,如需转载请自行联系原作者

优秀的个人博客,低调大师

Palo Alto Networks与普华永道共同建立漏洞防护安全机制

下一代安全企业Palo Alto Networks®(纽交所代码:PANW)近日联手普华永道网络安全与隐私实践团队,共同帮助客户企业搭建安全架构、组织结构并优化计算流程,以此防止安全漏洞的产生。 Palo Alto Networks与普华永道将联合设计下一代安全框架,并作为指南为客户企业搭建基于漏洞防护的安全架构。这一框架采用最新安全技术,可有效应对当今威胁。 Palo Alto Networks 业务与企业发展高级副总裁Chad Kinzelberg表示:“ Palo Alto Networks 与普华永道的合作,将下一代安全技术、最佳实践及服务产品集成于实用‘蓝图’之中,助力企业机构扩展其防御最新网络威胁的能力,维护数字时代的信任。” 此外,安全产品和服务将实现集成,这有助于客户更加轻松地搭建理想架构,进而有效解决影响安全的三个主要因素:技术、人员和流程。 普华永道全球网络安全负责人David Burg表示,“我们认为,企业机构保持网络弹性至关重要,各家机构需要加强风险管理流程,才能实现对网络威胁的更优甄别和封堵,且不以牺牲网络为代价。与Palo Alto Networks 的合作,有助于我们为客户提供下一代安全技术和专业信息,在保护客户免受最新网络威胁攻击时,助其寻求全新商机。” 原文发布时间为:2016-04-15 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

优秀的个人博客,低调大师

伪Android应用BeNews的攻击机制是怎样的?

Hacking Team数据泄露事故表明,伪装Android应用可通过使用动态加载技术绕过Google Play Store中的过滤功能。这种攻击的工作原理是什么,用户和企业可如何检测这些恶意应用? Michael Cobb:备受争议的IT安全公司Hacking Team沦为网络攻击的受害者,攻击者宣布他们正在通过Hacking Team自己的Twitter账号将其客户文件、合同、财务资料和内部邮件提供公众下载。(该公司专门向政府、执法机构和企业销售“攻击性”入侵和监控工具及服务,这400GB泄露数据向我们揭露了政府和企业监控及间谍活动的精彩世界。) 在这些泄露的文件中还包含文件解释如何使用Hacking Team的软件,以及某些应用的源代码。安全软件公司Trend Micro研究人员在这些数据中发现了恶意Android应用样本,该应用伪装成新闻app,并使用BeNews作为名称(这是现已解散的新闻网站的名称),这个app看似合法,并且,该应用不包含漏洞利用代码,在安装时只要求三个权限。这种无害的伪装让它可通过Google Play的审批过程。然而,在安装该应用后,它会使用动态加载技术执行额外的代码。 动态加载让应用只加载需要的组件,在某些相关组件不总是需要时,这种被用来减小可执行文件的大小以及提高性能。在这个假Android应用的情况下,这种技术被用来延迟恶意代码的加载,直至app通过审核以及被安装。它安装Hacking Team的RCSAndroid监控程序,这被安全专家认为是最复杂的Android恶意软件。它可捕捉屏幕截图、监控剪贴板中的内容、收集密码、联系人和信息,并可使用手机的麦克风录音。该app利用了特权升级漏洞—CVE-2014-3153,这是Android 2.2到4.4.4中存在的漏洞,用以绕过设备安全以及允许远程攻击者访问。 在从Google Play移除之前,这个假的BeNews应用被下载多达50次,现在这个应用以及Hacking Team的其他软件的源代码已经公开,网络罪犯肯定会利用它来添加新的或改进的功能到他们自己的攻击工具。不过,从好的方面来看,泄露的数据包含大量信息可供安全研究人员用于调查从未被披露或修复的其他漏洞。Hacking Team也建议可使用沙箱技术来阻止攻击者利用漏洞攻击设备。希望这将鼓励供应商开发更好的工具以及更多地利用这种缓解技术。 企业应该通过安全消息推送随时了解这个快速变化的移动安全环境,并确保联网的移动设备保持更新和修复。现在有很多移动保护套件可提供额外的保护以防止恶意应用绕过app store和OS安全措施,这包括Trend Micro的Mobile Security for Android、ESET Mobile Security for Android以及McAfee Mobile Security,这些都是企业版本。 作者:Michael Cobb 来源:51CTO

优秀的个人博客,低调大师

安卓手机曝彩信安全漏洞,因开源机制?

今年7月以色列移动安全公司 Zimperium 研究人员 Joshua Drake 发现 Android 系统核心组成Stagefright框架存在允许黑客执行远程恶意程序严重安全漏洞,一旦用户接受并打开一条彩信,通过浏览器下载特定视频文件或者打开嵌入多媒体内容的网页,黑客就能侵入手机。该漏洞俨然成为该系统最危险的漏洞,影响95%的安卓用户,对此今天Zimperium公司发布了Stagefright Detector App,至少让你知道是否已经成功安装补丁修复这个最危险漏洞。 如 果你正在使用Nexus设备,那么谷歌官方已经放出了修复补丁;如果你正在使用Galaxy S6或者其他设备,那么可能还需要再等待一段时间。Google承诺为Android提供3年安全更新、以及为自家设备提供2年期的“重大”更新。该公司 将把与安全相关的变动及时告知合作伙伴,以便其能够及时将之纳入更新。一旦问题得到完整披露,Google将把相关补丁投放到Android开源项目 (AOSP)社区。 作为Google最重要的合作伙伴之一,三星也吐露了将为设备推出每月更新的意图。Android Police的报告称,Sprint早已为较新的旗舰(比如Galaxy S5)推出了更新,尽管由运营商主推(而非由三星主动带来)的更新让大家感到有些失望。 文章转载自 开源中国社区 [http://www.oschina.net]

优秀的个人博客,低调大师

从 LinkedIn 的数据处理机制学习数据架构

LinkedIn.com是当今最流行的专业社交网站之一,本文描述了LinkedIn.com是如何管理数据的。如你对文中的观点有异议亦或文中有遗漏的部分请随时告诉我。 LinkedIn.com数据用例 下面是一些数据用例,可能我们在浏览LinkedIn网页时都已经看到过了。 更新后的个人资料后几乎可以实时的出现在招聘搜索页面 更新后的个人资料后几乎可以实时的出现在人脉网页 分享一个更新,可以近实时的出现在新闻feed页面 然后会更新到其他只读页面,像”你可能认识的人“、”看过我资料的人“、”相关搜索“等。 令人震惊的是,如果我们使用较好的宽带,这些页面可以在数毫秒内完成加载!让我们向LinkedIn工程师团队致敬! 早期的LinkedIn数据架构 像其它初创公司一样,LinkedIn 早期也是通过单个的RDBMS (关系型数据库管理系统)的几张表来保存用户资料和人脉关系。是不是很原始?后来这个RDMBS扩展出两个额外的数据库系统,其中一个用来支撑用户个人资 料的全文搜索,另一个用来实现社交图。这两个数据库通过Databus来取得最新数据。Databus是一个变化捕捉系统,它的主要目标就是捕捉那些来至 可信源(像Oracle)中数据集的变更,并且把这些变化更新到附加数据库系统中。 但是,没过多久这种架构就已经很难满足网站的数据需求了。因为按照Brewerd的CAP理论想要同时满足下面的条件看似不太可能: 一致性:所有应用在同一时刻看到相同的数据 可用性:保证每个请求都能收到应答,无论成功或失败 分区容错性:部分系统的消息丢失或失败不影响系统系统整体的正常运行 根据上面的法则,LinkedIn工程师团队实现了他们称作为时间线一致性(或者说近线系统的最终一致性,下面会解释)以及另外两个特性:可用性和分区容错性。下面介绍目前LinkedIn的数据架构。 LinkedIn如今的数据架构 如果要支撑在不到一秒钟内处理数百万用户的相关事务,上面的数据架构已经明显不足了。因此,LinkedIn 工程师团队提出了三段式(three-phase)数据架构,由在线、离线以及近线数据系统组成。总体上讲,LinkedIn数据被存储在如下几种不同形 式的数据系统中(看下面的图): RDBMS Oracle MySQL(作为Espresso的底层数据存储) RDBMS Espresso(LinkedIn自己开发的文档型NoSQL数据存储系统) Voldemart (分布式Key-value存储系统) HDFS (存放Hadoop map-reduce任务的数据) Caching Memcached 基于Lucene的索引 存放查询、关系图等功能数据的Lucene 索引 Espresso使用的索引 图:LinkedIn数据库系统包括了DataBus、NoSQL、RDBMS以及Indexes 上面提到的数据存储库被归为三种不同类型的系统,下面会逐一解释: 在线数据库系统 在线系统处理用户的实时互动;主数据库像Oracle就属于这一类别。主数据存储用来支撑用户的写操作和少量的读操作。以Orcale为 例,Oracle master会执行所有的写操作。最近,LinkedIn正在开发另一个叫做“Espresso”的数据系统来满足日益复杂的数据需求,而这些数据看似不 应从像Oracle这类的RDBMS中获取。他们能否淘汰所有或大部分的Oracle并将数据完全转移到像Espresso这类的NoSQL数据存储系统 中去?让我们拭目以待。 Espresso是一个支持水平扩展、索引、时间线一致性、基于文档且高可用的NoSQL数据仓库,旨在代替支撑公司网页操作所使用的传统Oracle数据库。设计它的初衷是为了提高LinkedIn的InMail消息服务的可用性。目前有如下一些应用在使用Espresso作为可信源系统。能够看到NoSQL数据存储是如果被用来处理如此众多应用的数据需求很是神奇! 成员间消息, 社交动作,如:更新 文章分享 用户个人资料 公司资料 新闻文章 离线数据库系统 离线系统主要包括Hadoop和一个Teradata数据仓库,用来执行批处理和分析类的工作。之所以被称为离线是因为它对数据执行的的批处理操作。 Apache Azkaban被用来管理Hadoop和ETL任务,这些任务从主可信源系统获取数据后交由map-reduce处理,处理结果被保存在HDFS,然后通知’消费者‘(例如:Voldemart)通过合适的方式来获取这些数据并切换索引来保证能获取到最新的数据。 近线数据库系统(时间线一致性) 近线系统的目标是为了实现时间线一致性(或最终一致性),它处理类似’你可能认识的人(只读数据集)‘、搜索以及社交图这些功能,这些功能的数据会持续更新,但它们对延迟性的要求并不像在线系统那样高。下面是几种不同类型的近线系统: Voldemart,一个Key-Value存储系统,为系统中的只读页面提供服务。Voldemart的数据来源于Hadoop框架 (Hadoop Azkaban:编排Hadoop map-reduce任务的执行计划)。这就是近线系统,它们从类似Hadoop的离线系统获取数据。下面这些页面的数据都是来自于Vold emart: 你可能认识的人 看过本页面的人还在看 相关搜索 你可能感兴趣的工作 你可能感兴趣的事件 下面是几种不同的索引,这些索引由Databus-一个变化数据捕捉系统-来更新的: 供SeaS(Search-as-a-Service)使用的’成员搜索索引‘。当你在LinkedIn上搜索不同的成员时,这些数据就是来自于搜索索引。通常这个功能对招聘人员的帮助很大。 社交图索引帮助在人们的人脉关系中显示成员以及关系。通过这个索引用户几乎可以实时的得到网络关系的变化。 通过读复制集获取到的成员资料数据。这些数据会被’标准化服务‘访问。读复制集是对源数据库的复制,这样能使源数据库的更新同步到这些复制集上面。增加读复制集的最主要原因是能够通过将读操查询分散到读复制集上来减轻源数据库(执行用户发起的写操作)的压力。 下图展示了数据变化捕获事件是如何利用Databus更新到近线系统的: 用数据用例来展示它们是如何工作的 假如你更新了你个人资料中的最新技能和职位。你还接受了一个连接请求。那么在系统内部到底发生了什么: 将更新写入Oracle Master数据库 然后Databus做了如下一系列奇妙的工作来实现时间线一致性: 将资料变更,如最新技能和职位信息,更新到标准化服务。 将上面提到的变更更新到搜索索引服务。 将关系变更更新到图索引服务。 数据架构经验 如果要设计一个像LinkedIn.com一样的支持数据一致性、高扩展性且高可用性的数据架构,可以借鉴下面的经验: 数据库读写分离:你应当计划两种数据库,一种用来执行写操作的可以称为“可信源”系统,另一种执行读操作的可以称为派生数据库系统。这里的经验法则就是将由用户发起的写操作和用户读操作使用的数据库区分开来。 派生数据库系统:用户的读操作应该被分配到派生数据库或者读复制集上去。而派生数据库系统则可以建立在下面的系统之上: - Lucene 索引 NoSQL数据存储,例如:Voldemart、Redis、Cassandra、MongoDB等。 对于用户的读操作,应该尽量从主可信源数据库系统创建索引或者基于key-value的数据(来源于Hadoop map-reduce之类的系统),并且将每次由用户发起的被写入主可信源系统的变更一并更新到这些索引或派生数据(key-value)。 为确保派生数据库系统的数据是最新的,你可以选择应用复写(application-dual writes),即在应用层同时写入主数据库和派生数据库系统,或日志挖掘(读取通过批处理任务得到的主数据存储系统的事务提交日志)。 创建派生数据时,你可以针对主数据集或者变更数据集执行基于Hadoop的map-reduce任务,然后更新HDFS并且通知派生数据存储系统(类似Voldemart的NoSQL存储)来取走数据。 U对于数据一致性来说,你可以以将这些数据存储库创建为分布式系统,集群中的每个节点又都包含主从节点。所有节点都可以创建水平扩展的数据Shards。 为了保证这些分布式数据存储系统正常运行时间最大化,你可以使用像Apache Helix这一类的集群管理工具。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册