一点 C# 到 C++ 的共享
前几天看到这样一篇博客《那些年·我们读过的专业书籍》,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不了2,3本书,不同的技术能力的人,适合看的书都不太一样,在这么多大家都认为是经典的书中,选出几本真正适合自己的才是王道,经典一多了,有些比起来就不是那么经典了,当然大家都说经典,自然有可看之处,如果有多余的时间,多看些书自然是好的。
下面是我看过的技术书籍(不一定看完),还有本《程序员的自我修养》在老家,其他几本不怎么样就没有列出来。
买的第一本技术书籍是《数据结构与算法分析》
当时刚毕业不久,在学校时没有买技术书籍的概念,在学校时也没怎么逛过技术网站,毕业后逛得比较多,当时是做C#,那时Android很火想学,内心又一直认为成为一名好的程序员,底层知识是要会的,当时的情况是:在做C#,想做Android,又想做C++,没准备长做C#,最后买了这本算法相关的书籍,决定学C++,注意准备开始吐槽:是谁说程序=算法+XX,这个等式对于很多刚毕业的同学们根本不成立,算法对于大部分的程序员来说都是弱项好不好,很多菜逼根本就不会算法,就会增删改查,有木有,别一开始就来最难的,容易打击自信心,是谁说算法很重要的,哥才写了90多篇博客,就有19篇跟算法有关的,私底下也学习了很多算法相关的文章,哥是要转C++好不好。吐槽告一段落,算法还是很重要的,有时间还是要好好研究一下。
《Effective C++》买的第一本完全关于C++的书
刚开始都看不懂,反复看之后,就很懂了,到现在为止应该至少看了4遍,感觉现在给我大半天的时间,能大致在看一遍,曾经一度想把书中的50条法则写成几篇博客的,最后由于太懒只写了3篇
Effective C++面向对象与继承
Effective C++ 类与函数设计和申明
Effective C++构造函数析构函数Assignment运算符
开始没看懂的时候,没觉得这书怎么样,等一条一条的看懂之后,发现这书他妈的写得太好,我忍不住的要赞美他,作者用很短的几句话就把事情说得很清楚,作者的表达能力的确牛逼,再次发现作者表达能力特别牛逼的是看吴军的《数学之美》,他用几句话就把一个关于图的问题讲得很清楚,其他的一些所谓的经典作者写的内容看起来就不是那么好理解,当然这跟讲的内容、跟读者所掌握的的知识以及读者的理解能力有关。
如果你要学C++,那么我推荐你看这本,虽然它没有教我们入门C++,也没有教我们深度理解C++,也没讲更底层的知识,但是它是第一本,将很多关于C++编程的重要知识点收录成的第一本书,第一本自然收录的是在开发中出现频率较大的,值得一讲的内容,之后有很多所谓经典的跟风之作,如
《Exceptional C++》和《More Exceptional C++》,包括作者自己的《More Effective C++》,
当然这些书中讲的内容可能是你八辈子也用不上的,但可能是要掌握的,这些书讲的差不多是一些技巧性的东西,或是实现了一个XX功能,有点通用性,人家把这些点讲得很清楚,这类书不用急着看,等你C++学得差不多了,再看也不迟,那时会看得很快,因为他们没讲什么新的知识,都是对现有知识的运用。
《深度探索C++对象模型》要想更深入的理解C++,当然是这本,这本真的是经典中的必看。
这本书共7章320页,但出版社却把它弄得比较厚,好像不厚就感觉不是好书似的。每章的内容都很不错,建议重点看第三章和第四章,第三章讲C++对象的内存布局,第四章讲C++的各种方法编译后是啥样子的,以及方法是怎么被调用的,这是C++最重要的东西,其他任何技术不都是建立在数据和方法之上吗!当然如果你是菜鸟看完之后你还是菜鸟,你不会变成大牛,因为我看了这些书后我并没有变成大牛,你同样也不会,但你会更深入的理解C++,你会对你自己的能力更自信。看完这本书后,我觉得我可以做C++了,于是跨部门面试,十分钟左右,我现在的经理就问我什么时候可以过来。当然刚开始做C++时各种不顺,实战太少。你不会因为看了几本书而成为大牛。看这本书之前除了《编译原理》还没有买,其他的书都看完或是看过一些,刚开始的时候有点看不懂,之后很快的看懂并看完了,因为看这本书之前我反复看了《深入理解计算机系统》的第七章(链接)和《程序员的自我修养》的大部分内容,对编译和链接还是有些了解,再看这本书自然会快些。看完这本书我写了三篇博客,但看的人很少。
构造函数产生的点及原因
虚方法的调用是怎么实现的(单继承VS多继承)
C++ Data Member内存布局
《深入理解计算机系统》就不多说了,估计每个过来人都会推荐,如果你想成为一名好的程序员,就是必看必看,不管你是什么程序员,我相信很多C#牛逼的程序员都看过,这本书讲了很多重要的知识,不是很深,但装逼足以,要全都看懂还是有些难的,之前就有个同事买了这本书,里面夹了一张跟他有纯洁男女关系的女性朋友的照片,作为书签,,这的确是督促自己看书的好方法。关于这本书我写了两篇博客,用这本书的内容写博客可以写很多篇。
数据对齐
在开发中你可能没有考虑到的两个性能优化
由于我一直在自学C++,重点推荐这3本,前两本推荐指数更高:
1:深度探索C++对象模型
2:深入理解计算机系统
3:Effective C++
其他的一些书都是值得看的,写到这里就有点不想写了,再说一本吧,其他的就不多说了,看完了上面这三本,再看其他的。由于我是做Windows C++开发,就说说《Windows核心编程》,做Windows开发的同学要看看。关于这本书我写了4篇博客
多线程编程--5种方法实现线程同步
Windows几种线程同步方法介绍
Windows线程基础
Windows内核对象简介
这4篇博客基本上是讲线程、进程、内核对象、线程同步。这本书讲了Windows操作系统的很多东西,如内存管理,动态链接库,这些都是做Windows开发需要知道的,也是我比较薄弱的,在开发中基本都是用库,现在做的项目,两个Solution,其中一个有100多个project,刚开始来的时候经常编译都通过不了,加上每次编译的时间较长,搞了半天编译失败,挺打击人的。
关于书的内容就说到这里,免得大家以为我是来说书,显然说书不是我的强项,现在就来说说转C++的一些感受。
老实说如果现在用的是C#、JAVA、PHP等,且没用过C/C++不太建议转C/C++,但非常建议多看看底层的知识,C#做了几年之后发现也就是那点东西,不深入学习,很多东西其实是只会用,根本不知道到底是怎么回事。我相信很多C#程序员不知道多态到底是怎么实现;方法到底是怎么被调用的;不知道哪些是在编译器确定,哪些是在运行时确定的;经常听到字符串池的概念等,微软把C#封装得太好了,掉坑里的机会太少了,大不了不管3721,try...catch一下,也让有些人变得不那么爱思考了,像C/C++一不小心就掉坑里了,不思考都不行。经常听到有人说:C#入门容易,精通难。那是因为学底层的知识更难些好不好。说这些不是针对谁,以前写C#就是吃着火锅唱着歌,各种轻松舒服,C++就两字:苦逼。要啥啥没有,如分割字符串这种最基本的功能都得自己实现,刚做C++的感觉就是:自己坐在豪华的游艇上,看到对面的海盗船很酷,于是就往海盗船一跳,一上船发现这坐船到处都在漏水,各种设施都很差劲,一不小心就掉水里了,各种感觉不适应。
学C++好很长时间吗?不要
从自学C++到现在差不多3年时间,期间多次想放弃,心中常有的一个念头就是:把这些时间用在学C#,C#可以学得更好,工资可以拿得更多,每次看到发到手中的这点工资,就没啥干劲了,但我也一直明白若要把程序当做一个长久的职业,我是要必会C/C++的,期间偶尔有几个月没有学C++,但最后还是放不下,又想起她。最后拖到两年多才做自己一直想做的C++,感觉是个很漫长的过程,内心的针扎还是挺多的。这两年来业余时间拿来学习C++的时间平均在半个小时左右,跟10000个小时比起来还是很少的,当然10000个小时是要成为真正的大牛的,而我是刚上贼船,看了这么多书理论还是有些,还需大量实战。
C++很难吗?NO
C++被成为世界上最难的编程语言,其实并没有传说中的那么难,但有一点是可以肯定的C++程序员在没有成为小牛之前一直都在针扎,对,就是针扎,过得很苦逼,我在上个部门做C#的时候没加过一天班,做C++后,以前的同事说我瘦了,以前做C#用一个月的时间一个人重写了公司的工作流,做C++后,花了两个多月做个历史管理器,还经常加班。虽然现在自信多了,但还要继续针扎下去。等成为小牛后,我相信就不分编程语言了,但如果你不是做C/C++,却想做C/C++,就别听语言都是浮云这种废话。在你成为小牛之前你才是浮云,你得苦逼,而且这是转行,这也是我不太建议转C/C++的一个原因,你之前学到的很多东西都是白学的,你要从0.1开始,又开始做菜鸟,大家都知道菜鸟的日子不是那么好过,等你成为小牛之后编程语言才是浮云。为什么大家都说他难呢?我估计就是被哪些没学好的人宣传的,没学好之前过得苦逼,那当然发自内心的认为难,其他的朋友们听他们一说估计也觉得难。在加上一些大牛也说C++难,人家说难不是因为自己没学好而说难,人家是因为知道得大多,发现C++太灵活,坑太多,新手很容易掉坑里。要我说,任何编程语言,基础语法也就那点东西,等你明白了这些基础的东西是怎么实现,为什么要这样实现,编译后是个什么样子,你也就发现C++也就那样,不管牛不牛,也都是在用C++干活,只不过是有的人再用C++做增删改查,有的人在做大家都在用的产品。
怎么学习C++?标准答案是:多思多写多看
作为新菜鸟的我,是不应该回答这个问题的,但这个问题的正确答案的确是多思多写多看。现在来说说我的失败经历,作为智商不太低的我,学了两年多才做C++,这显然是失败(哈哈,程序员就应该自信,千万别怀疑自己的智商,一点都不能有)。的确我是走了弯路,所以我像很多有失败经历的前辈一样,来分享自己的失败经历,以免后辈们重蹈前辈们的覆辙。
我学了好久的C++,都不会写一个C++的类,其实开始的时候一直都是在写C,一直在用C写算法,严重受了算法重要的影响,其实开始的时候我都不是在学C++,买的第一本技术书,不是关于C++的,而是关于算法的。学C++的时候也没有买一本比较好的系统介绍C++的书籍。直接第一本C++书籍就是Effective C++,看这本书还是要一定基础的。看这本书的时候我已经做了两年多的C#,在学校里有一点C的基础,之后也看过《高质量C++编程指南》,还是有一定的程序基础,如果你有一定的程序基础,想转C++,还是建议先看本系统介绍C++的书籍,如《C++ Primer》,这本书的作者也是《深度探索C++对象模型》的作者,还有C++他爹写的那本啥也值得一读,大家都是这么说,应该不会错,两本选一本,有一定基础之后再看Effective C++,感觉不错之后再看《深度探索C++对象模型》,这本差不多之后再看《深入理解计算机系统》,这本不是讲C++的,讲的是底层的东西,你学C++不就是想学底层的东西吗,C++语法就那点东西,成为牛人之前还有一堆的书等着你去看,你还要写一堆的代码。
我现在在学习Windows的一些东西,做Windows C++方向吗!业余时间看看《编译原理》,比较难懂,看懂之后,我相信很多东西都会明白得更透彻。明年估计是我成为小牛的重要阶段,阿汉加油。
为了不让我的博客因偏差太大,而让想做C++的朋友走弯路,在这里付上耗子叔的《如何学好C++语言》 http://coolshell.cn/articles/4119.html
推荐阅读
-
一点 C# 到 C++ 的共享
-
基于SSM的面向过程考核的高校课程实验系统-00941(免费领取源码+数据库) 可做计算机毕业设计 JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案等
-
贪婪算法在 Python、JavaScript、Java、C++ 和 C# 中的多种实现及其在硬币变化、分数骑士、活动选择和使用哈夫曼编码的最小生成树问题中的应用实例
-
C# 打开 WiFi 热点、共享 WiFi 的四种方法总结(一)
-
epoll简介及触发模式(accept、read、send)-epoll的简单介绍 epoll在LT和ET模式下的读写方式 一、epoll的接口非常简单,一共就三个函数:1. int epoll_create(int size);创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。这个参数不同于select中的第一个参数,给出最大监听的fd+1的值。需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close关闭,否则可能导致fd被耗尽。2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);epoll的事件注册函数,它不同与select是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型。第一个参数是epoll_create的返回值,第二个参数表示动作,用三个宏来表示:EPOLL_CTL_ADD:注册新的fd到epfd中;EPOLL_CTL_MOD:修改已经注册的fd的监听事件;EPOLL_CTL_DEL:从epfd中删除一个fd;第三个参数是需要监听的fd,第四个参数是告诉内核需要监听什么事,struct epoll_event结构如下:struct epoll_event { __uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */};events可以是以下几个宏的集合:EPOLLIN :表示对应的文件描述符可以读(包括对端SOCKET正常关闭); EPOLLIN事件:EPOLLIN事件则只有当对端有数据写入时才会触发,所以触发一次后需要不断读取所有数据直到读完EAGAIN为止。否则剩下的数据只有在下次对端有写入时才能一起取出来了。现在明白为什么说epoll必须要求异步socket了吧?如果同步socket,而且要求读完所有数据,那么最终就会在堵死在阻塞里。 EPOLLOUT:表示对应的文件描述符可以写; EPOLLOUT事件:EPOLLOUT事件只有在连接时触发一次,表示可写,其他时候想要触发,那要先准备好下面条件:1.某次write,写满了发送缓冲区,返回错误码为EAGAIN。2.对端读取了一些数据,又重新可写了,此时会触发EPOLLOUT。简单地说:EPOLLOUT事件只有在不可写到可写的转变时刻,才会触发一次,所以叫边缘触发,这叫法没错的!其实,如果真的想强制触发一次,也是有办法的,直接调用epoll_ctl重新设置一下event就可以了,event跟原来的设置一模一样都行(但必须包含EPOLLOUT),关键是重新设置,就会马上触发一次EPOLLOUT事件。1. 缓冲区由满变空.2.同时注册EPOLLIN | EPOLLOUT事件,也会触发一次EPOLLOUT事件这个两个也会触发EPOLLOUT事件 EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);EPOLLERR:表示对应的文件描述符发生错误;EPOLLHUP:表示对应的文件描述符被挂断;EPOLLET: 将EPOLL设为边缘触发(Edge Triggered)模式,这是相对于水平触发(Level Triggered)来说的。EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里3. int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);等待事件的产生,类似于select调用。参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大,这个maxevents的值不能大于创建epoll_create时的size,参数timeout是超时时间(毫秒,0会立即返回,-1将不确定,也有说法说是永久阻塞)。该函数返回需要处理的事件数目,如返回0表示已超时。-------------------------------------------------------------------------------------------- 从man手册中,得到ET和LT的具体描述如下EPOLL事件有两种模型:Edge Triggered (ET)Level Triggered (LT)假如有这样一个例子:1. 我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2. 这个时候从管道的另一端被写入了2KB的数据3. 调用epoll_wait(2),并且它会返回RFD,说明它已经准备好读取操作4. 然后我们读取了1KB的数据5. 调用epoll_wait(2)......Edge Triggered 工作模式:如果我们在第1步将RFD添加到epoll描述符的时候使用了EPOLLET标志,那么在第5步调用epoll_wait(2)之后将有可能会挂起,因为剩余的数据还存在于文件的输入缓冲区内,而且数据发出端还在等待一个针对已经发出数据的反馈信息。只有在监视的文件句柄上发生了某个事件的时候 ET 工作模式才会汇报事件。因此在第5步的时候,调用者可能会放弃等待仍在存在于文件输入缓冲区内的剩余数据。在上面的例子中,会有一个事件产生在RFD句柄上,因为在第2步执行了一个写操作,然后,事件将会在第3步被销毁。因为第4步的读取操作没有读空文件输入缓冲区内的数据,因此我们在第5步调用 epoll_wait(2)完成后,是否挂起是不确定的。epoll工作在ET模式的时候,必须使用非阻塞套接口,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。最好以下面的方式调用ET模式的epoll接口,在后面会介绍避免可能的缺陷。 i 基于非阻塞文件句柄 ii 只有当read(2)或者write(2)返回EAGAIN时才需要挂起,等待。但这并不是说每次read时都需要循环读,直到读到产生一个EAGAIN才认为此次事件处理完成,当read返回的读到的数据长度小于请求的数据长度时,就可以确定此时缓冲中已没有数据了,也就可以认为此事读事件已处理完成。Level Triggered 工作模式相反的,以LT方式调用epoll接口的时候,它就相当于一个速度比较快的poll(2),并且无论后面的数据是否被使用,因此他们具有同样的职能。因为即使使用ET模式的epoll,在收到多个chunk的数据的时候仍然会产生多个事件。调用者可以设定EPOLLONESHOT标志,在 epoll_wait(2)收到事件后epoll会与事件关联的文件句柄从epoll描述符中禁止掉。因此当EPOLLONESHOT设定后,使用带有 EPOLL_CTL_MOD标志的epoll_ctl(2)处理文件句柄就成为调用者必须作的事情。然后详细解释ET, LT:LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表.ET(edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once),不过在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认(这句话不理解)。在许多测试中我们会看到如果没有大量的idle -connection或者dead-connection,epoll的效率并不会比select/poll高很多,但是当我们遇到大量的idle- connection(例如WAN环境中存在大量的慢速连接),就会发现epoll的效率大大高于select/poll。(未测试)另外,当使用epoll的ET模型来工作时,当产生了一个EPOLLIN事件后,读数据的时候需要考虑的是当recv返回的大小如果等于请求的大小,那么很有可能是缓冲区还有数据未读完,也意味着该次事件还没有处理完,所以还需要再次读取: 这里只是说明思路(参考《UNIX网络编程》) while(rs) {buflen = recv(activeevents[i].data.fd, buf, sizeof(buf), 0);if(buflen < 0){// 由于是非阻塞的模式,所以当errno为EAGAIN时,表示当前缓冲区已无数据可读// 在这里就当作是该次事件已处理处.if(errno == EAGAIN)break; else return; }else if(buflen == 0) { // 这里表示对端的socket已正常关闭. } if(buflen == sizeof(buf) rs = 1; // 需要再次读取 else rs = 0; } 还有,假如发送端流量大于接收端的流量(意思是epoll所在的程序读比转发的socket要快),由于是非阻塞的socket,那么send函数虽然返回,但实际缓冲区的数据并未真正发给接收端,这样不断的读和发,当缓冲区满后会产生EAGAIN错误(参考man send),同时,不理会这次请求发送的数据.所以,需要封装socket_send的函数用来处理这种情况,该函数会尽量将数据写完再返回,返回-1表示出错。在socket_send内部,当写缓冲已满(send返回-1,且errno为EAGAIN),那么会等待后再重试.这种方式并不很完美,在理论上可能会长时间的阻塞在socket_send内部,但暂没有更好的办法. ssize_t socket_send(int sockfd, const char* buffer, size_t buflen) { ssize_t tmp; size_t total = buflen; const char *p = buffer; while(1) { tmp = send(sockfd, p, total, 0); if(tmp < 0) { // 当send收到信号时,可以继续写,但这里返回-1. if(errno == EINTR) return -1; // 当socket是非阻塞时,如返回此错误,表示写缓冲队列已满, // 在这里做延时后再重试. if(errno == EAGAIN) { usleep(1000); continue; } return -1; } if((size_t)tmp == total) return buflen; total -= tmp; p += tmp; } return tmp; } 二、epoll在LT和ET模式下的读写方式 在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是: * EAGAIN: 再试一次 * EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block * perror输出: Resource temporarily unavailable 总结: 这个错误表示资源暂时不够, 可能read时, 读缓冲区没有数据, 或者, write时,写缓冲区满了 。 遇到这种情况, 如果是阻塞socket, read/write就要阻塞掉。 而如果是非阻塞socket, read/write立即返回-1, 同 时errno设置为EAGAIN. 所以, 对于阻塞socket, read/write返回-1代表网络出错了. 但对于非阻塞socket, read/write返回-1不一定网络真的出错了. 可能是Resource temporarily unavailable. 这时你应该再试, 直到Resource available. 综上, 对于non-blocking的socket, 正确的读写操作为: 读: 忽略掉errno = EAGAIN的错误, 下次继续读 写: 忽略掉errno = EAGAIN的错误, 下次继续写 对于select和epoll的LT模式, 这种读写方式是没有问题的. 但对于epoll的ET模式, 这种方式还有漏洞. epoll的两种模式 LT 和 ET
-
如何将三方库集成到 hap 包中 - 通过集成开发环境集成以非 cmake 方式构建的 C/C++ 三方库
-
C++ 和 C# 互调 dll 的实施步骤
-
蓝桥杯] 十六进制到八进制的 C++ 实现
-
苏州,遇见恩智浦痞子恒--刚下高铁比较累 "飞机、高铁、打车、打车、打车",加上这些年运动机能下降,身体状态比不上年轻的时候,但是一到打球的时候,我就很兴奋,我喜欢呆在球场上的感觉,这种感觉跟着我的体力走,我有体力的时候,我就想在球场上大杀四方,我没有体力的时候,我就想回家睡觉。没有体力的时候,我就想回家睡觉。 今天的比赛很激烈,恩智浦的年轻球员有那么一点凶,我本来是想过来打酱油的,但实际情况是他们在不停地搓我的老腰,晚上我发了一张比赛的照片,一个微信好友私聊我说了下面的话。 大家自己体会,我觉得有人在针对我的腰,????。 痞子恒打得很好,中投和突破上篮技术很娴熟,有几次上篮我觉得很勉强,但球还是往篮筐里面进,可能是这种同是天涯沦落人的情怀,让我喜欢上了这个同龄的小伙子,做技术很好,打球也很好,待人很体贴????。 比赛结束后,痞子恒带我们去吃烧烤,因为太累了,胃口不是很好,只能看着肉叹气,不过吃饭的时候听大家聊天的感觉还是很不错的,让我知道了苏州的工作和生活节奏。 晚上回到宾馆,何先生说:"这就是他们的生活啊,让我感慨万千"。 我跑了三千多里路,就是为了来这里玩游戏,说出来你可别笑! ---- 痞子衡嵌入式公共号文章汇总
-
iCloud 切换区域,中国区保留 appStore(更新)--自 2018 年 2 月 28 日起,中国区 iCloud 由云上贵州管理 苹果公司发布的公告 https://support.apple.com/zh-cn/HT208352 关键词 关键部分 受影响的 iCloud 账户:国家或地区设置为 "中国 "的 Apple ID。 iCloud 包含的服务照片、邮件、通讯录、日历、提醒事项、备忘、书签、钱包、钥匙串、云备份、云驱动器、应用程序数据 新条款和条件: 同意仅出于本协议允许的目的并在中国法律允许的范围内使用服务。 云桂洲在提供服务时应使用合理的技能并尽职尽责,但在适用法律允许的最大范围内,我们不保证或担保您通过本服务存储或访问的任何内容不会意外损坏、崩溃、丢失或根据本协议的条款被删除,如果发生此类损坏、崩溃、丢失或删除,我们不承担任何责任。您应自行负责维护您的信息和数据的适当备份。 Apple 和云上贵州有权访问您存储在服务中的所有数据,包括有权根据适用法律相互之间共享、交换和披露所有用户数据(包括内容)。 本协议的解释、效力和履行应适用*法律。对于因本协议引起的或与本协议有关的任何争议,云桂洲和您同意提交中国国际经济贸易仲裁委员会(CIETAC)根据提交仲裁时有效的法律在北京进行具有约束力的仲裁。 由云桂洲管理,用户选择: 停用; ID 到地区; 受 iCloud(由云桂洲运营)条款和条件约束 首先,我想说说我对数据安全的看法。 当我在朋友圈发布通知时,有些朋友回复说国外的操作并没有多安全,或者国外的安全只是相对于国外而言的等等。首先,我非常感谢这些朋友,这让我反思什么是数据安全。以下观点均属个人观点: 国外的月亮一定比国内圆? 这是一个根深蒂固的问题,只要有人说国外的东西比国内好,就会有人嘲笑崇洋媚外。我觉得我们在某些方面应该向国外学习,比如搜索引擎和版权问题。打开百度搜索 "数据安全",第一行肯定是广告。打开谷歌搜索 "数据安全",第一条就是 "数据安全_百度百科" .....各种版权问题大家都明白,支持正版,但不仅客户一心想找免费破解,就连作者也往往没有保护自己劳动成果或产品的想法。但从另一个层面来说,国内的发展和安全,甩国外几条街。没有说哪里好,哪里不好,辩证地去学习更好。 国外也有别有用心的数据泄露,谈何安全? 从加密解密的角度看,自古以来就没有绝对安全的加密,只有相对安全的做法。苹果的棱镜门、微软的 cpu 漏洞,各种参差不齐的被破解案例 ....是的,这的确是一个很好的论据,但凡事都不能只看一面,当年苹果面对FBI破解手机的要求,几经论证,苹果还是拒绝破解。这点拿到国内,只要上面的文件传达下去,还有企业敢说不吗?还敢说不吗? 关于这次iCloud数据迁移个人看法? 把数据迁移到贵州的云端,相当于把手机的所有数据都存储在贵州的云端服务器上。也许访问数据的速度会快很多,但我会把我的iCloud区放到美国,因为我不想数据存在云上贵州后经常接到莫名其妙的电话或短信,更不想因为乱用国外服务器而被请去喝茶。iCloud一个ID,即从中国账号转到美国区,主要用于数据存在美国服务器上。appStore一个ID,除了注册一个中国ID外,专门用来下载应用用,因为国外ID不支持酷狗和网易云等应用。麻烦的是,用了新的 appStore ID 后,当前的应用还得重新下载安装,因为旧的应用 ID 与新的应用 ID 不兼容,安装不了。最后,iCloud迁移后,国内用户使用美国服务器,估计要 "扶墙 "了。 专业步骤: 首先,进行appleID设置,这是前提条件,否则无法选择转移区域! 取消 appleID 的双重认证 取消家庭共享选项 二、窗口下载并安装 icloud 3.0 版