有关购买二手 Macbook 的建议,请阅读这篇文章!
关于购买二手macbook的建议,看这一篇文章就够了!
- 写在前面
- 购买前的准备
- 二手mac防骗指南总结
- 购买macbook注意事项
- 结语
写在前面
你好!各位大神大佬大白小白和小白脸。。。
咳咳,楼主是一位大学毕业一年的青…青少年。。。
近期呢楼主想学习开发跨平台app,这对于只有一个windows电脑的我来说简直不可能。因为ios的特殊性,开发ios应用必须在macOS平台下进行xcode打包,所以购买一台mac电脑势在必行(从没买过mac电脑,如果不是开发需要,我可能不会买,谁让漂亮国总是跟我们过不去呢)。没办法,面对疾风……呸,面对现实吧!
购买前的准备
一直以来我都知道二手市场的水很深,所以对于二手我是抗拒的(不管什么二手,bingo你又懂了!)。所以我边逛闲鱼边搜攻略,完完整整大约两天吧,基本可以做到对骗术差的卖家一眼识破(你骗银!!)
嗯…接下来我总结一下二手mac的知识吧!希望善良的人们都能够独善其身和不向恶*低头,做一个恃强凌…呃那个除强扶弱、勇于斗争的人。
二手mac防骗指南总结
一:典型“中关村式骗局”
地点:多发于京都,其他地方也有极大可能
手法:骗子让你当面交易,骗子信息多为女性,就是为了让你放下心,等你到了地点她会说她现在在忙,让她朋友b带着电脑过去了。她朋友到了之后会带着你到一个楼房,然后让你验机,没问题后说要过户之类的,要你身份证,要你电话卡说去登记,然后给你一张合同让你签字,写着24什么的,注意,这是合约合同,表示你24个月都要付钱,类似于通信公司合约套餐。这时你不想要了,他们就让你联系卖家a,反正推来推去就是不让你退钱,甚至围上来几个大汉。并且该电脑是黑苹果,只能用手机卡上网,配置也是很久年代的配置。
场合:高配置机器,价格很低,吸引你过去
二:修改配置信息
地点:二手网站
手法:骗子利用高级修改器修改mac配置信息,把久远年代的机器刷成近年的新机器,这种很容易看出来,但纯小白的话肯定没有这些能力,所以如何辨别?1,查看机器的配置信息,一般处理器型号和图形卡型号等硬件信息是很难被刷的,所以看官网同款机器是否和这款机器的配置相同(不过现在显卡信息也可以刷了,所以参考性已经不大了)。2,看型号标识符,通过型号标识符上官网查看该型号对应的机器信息,如果不符合,就是刷的。3,查询序列号,三号合一或二号合一。什么意思?系统参数显示的序列号和机壳背面的序列号一致,如果有包装盒也要看包装盒背面的序列号是否一致,不一致就是刷的。一致的话上官网查询序列号,看该序列号是否能查到相应机器的在保信息。4,看机身型号,按理说,一个年代一个模具,2017款的mac不可能是2015款的机身,这个对应网上的图片来对比一下。5,需要注意的是:pro版从2016年之后的logo不是白色灯了,改成了镜面的logo。6,内存频率以1600为基准 小于1600的都是12年以前的机器,处理器参数比如2.4GHZ,如果小数点后是两位的,基本是12年款,delete键上的键是三角形的是13年款,是开机键则13年后款。7,暂时没想到,还请大佬为了社会正义舍身补充。
场合:中高配置机器,价格略低
三:偷梁换柱
地点:二手专卖店、市场、网站
手法:骗子有高超的拆机手法,把机器里值钱的配件更换了,最常见的是硬盘,虽然不影响使用,但普通硬盘和苹果的比差价太大了,而且非原装硬盘很容易出故障,二手也不保修你说是吧。怎么办?1,看参数信息:打开电脑的硬件参数,查看是否是原装信息。2,下载检测工具,比如鲁大师什么的,看是否是原装信息。3,建议送苹果店检测。
场合:中高配置机器,正常二手价
四:脱离平台交易
地点:二手网站
手法:骗子说可以面交或者货到付款。这时候要注意了,面交绝对不可以,一个正常的卖家也害怕被骗,所以也必定会走平台付款,当面验机可以,但一定要走平台,这样有问题还可以申诉。货到付款绝对不可以!货到付款绝对不可以!货到付款绝对不可以!!首先,骗子会利用信用高的账号让你放心,然后说给你寄过去当场验机如果没问题就付款给快递小哥,等你一签收他就把你拉黑了,然后你会发现用了不到两天就故障了。当然,如果你已经受骗了,不要慌,申请平台介入,走闲鱼小法庭,还有机会。有人会说,在平台付款再邮寄不就行了?天真!!等邮过来你会发现快递小哥跟你要钱,你问卖家不是在平台付过款了吗?卖家会说不好意思没注意到,你把钱给快递小哥,我把平台的钱退给你。bingo,你踩雷了!
场合:中高配置机器,价格略低
五:查看卖家信息:
1,电脑图片第一张就是一个女孩子守着电脑,一个小女孩子盯着电脑,而且是美女。2,这个电脑是我14年买的,或者今年,其实电脑是11款的或者12款的!别人也没说错啊,我今年买的二手可以不?套路的结果就是花了14款的钱买了12款的电脑。3,这台电脑自用的,翻一翻评价和发布的宝贝,几十个电脑。
以上基本都是骗子
六:糟糕!暂时没想到!!
购买macbook注意事项
一:检查外观:
看磕碰情况和机身模具是否符合
二:检查屏幕:
把背景图片换成单色图片,看是否有瑕疵。
三:检查键盘:
通过设置->键盘->输入法调出来虚拟键盘,每个键都按一遍,感受是否灵敏和松动,有的按键可能没反应。
四:检查外置接口:
用u盘插一下,如果主板没被动过基本没问题。
五:开盖检查:
检查有无进水痕迹或者拆卸痕迹,近年的mac基本只有硬盘可拆卸。我觉得开盖检查可能卖家不会同意,所以最好去苹果官方店。
六:联网检查:
看联网功能是否受损,再者就是看有没有锁,有锁的mac联网就会被锁。
七:检查电池循环计数:
循环计数越低证明机器(准确来说是电池)被用的次数越少,当然这个好像也可以刷
八:检查摄像头:
点软件栏里的FaceTime就能打开摄像头。
九:检查运行时长:
比较简单的方法就是打开两个视频网站同时播放超清视频(约高清越好),时间允许的话,播放个半小时以上,不会死机黑屏什么的,基本上就不会有问题了。这一步通常能查出显卡这些有没有问题,电脑有没有暗病。
十:查询序列号:
最经典的方法,查看在保状态等信息。
十一:打开系统偏好设置->安全性与隐私,确保硬盘加密FileVault已经关闭,这是硬盘加密功能,关闭的时候需要外接电源。
十二:10.10以上的Mac系统也可以有类似iOS7上iPhone上面通过查找我的iPhone锁定mac,现在Mac上的icloud确保注销也是非常有必要的。
十三:固件锁,这是锁住Mac主板的,这个没有关闭,你是不能通过U盘或者其他介质安装或者抹掉你原来系统的。
10.9系统以下(包括10.9)系统操作:关机状态->开机->按住Option(也是Alt键)->选择进入Recovery HD盘->OSX实用工具->固件锁
10.10以上系统操作:关机状态->开机->按住Command+R进入Recovery HD盘->OSX实用工具->固件锁
十四:经对方同意进行恢复出厂设置,或升级最新mac系统,这一步可以让一些假配置露出狐狸尾巴
结语
其实吧,我还是建议买官方通道(京东天猫官方等以及官网)的新机,毕竟有保障,或者教育优惠及官翻机等,是稍微便宜些,但便宜不了多少钱,便宜不到一千吧。
以上,欢迎补充。
上一篇: Axure 标签页切换功能-3.
推荐阅读
-
有关购买二手 Macbook 的建议,请阅读这篇文章!
-
F#探险之旅(二):函数式编程(上)-函数式编程范式简介 F#主要支持三种编程范式:函数式编程(Functional Programming,FP)、命令式编程(Imperative Programming)和面向对象(Object-Oriented,OO)的编程。回顾它们的历史,FP是最早的一种范式,第一种FP语言是IPL,产生于1955年,大约在Fortran一年之前。第二种FP语言是Lisp,产生于1958,早于Cobol一年。Fortan和Cobol都是命令式编程语言,它们在科学和商业领域的迅速成功使得命令式编程在30多年的时间里独领风骚。而产生于1970年代的面向对象编程则不断成熟,至今已是最流行的编程范式。有道是“*代有语言出,各领风骚数十年”。 尽管强大的FP语言(SML,Ocaml,Haskell及Clean等)和类FP语言(APL和Lisp是现实世界中最成功的两个)在1950年代就不断发展,FP仍停留在学院派的“象牙塔”里;而命令式编程和面向对象编程则分别凭着在商业领域和企业级应用的需要占据领先。今天,FP的潜力终被认识——它是用来解决更复杂的问题的(当然更简单的问题也不在话下)。 纯粹的FP将程序看作是接受参数并返回值的函数的集合,它不允许有副作用(side effect,即改变了状态),使用递归而不是循环进行迭代。FP中的函数很像数学中的函数,它们都不改变程序的状态。举个简单的例子,一旦将一个值赋给一个标识符,它就不会改变了,函数不改变参数的值,返回值是全新的值。 FP的数学基础使得它很是优雅,FP的程序看起来往往简洁、漂亮。但它无状态和递归的天性使得它在处理很多通用的编程任务时没有其它的编程范式来得方便。但对F#来说这不是问题,它的优势之一就是融合了多种编程范式,允许开发人员按照需要采用最好的范式。 关于FP的更多内容建议阅读一下这篇文章:Why Functional Programming Matters(中文版)。F#中的函数式编程 从现在开始,我将对F#中FP相关的主要语言结构逐一进行介绍。标识符(Identifier) 在F#中,我们通过标识符给值(value)取名字,这样就可以在后面的程序中引用它。通过关键字let定义标识符,如: let x = 42 这看起来像命令式编程语言中的赋值语句,两者有着关键的不同。在纯粹的FP中,一旦值赋给了标识符就不能改变了,这也是把它称为标识符而非变量(variable)的原因。另外,在某些条件下,我们可以重定义标识符;在F#的命令式编程范式下,在某些条件下标识符的值是可以修改的。 标识符也可用于引用函数,在F#中函数本质上也是值。也就是说,F#中没有真正的函数名和参数名的概念,它们都是标识符。定义函数的方式与定义值是类似的,只是会有额外的标识符表示参数: let add x y = x + y 这里共有三个标识符,add表示函数名,x和y表示它的参数。关键字和保留字关键字是指语言中一些标记,它们被编译器保留作特殊之用。在F#中,不能用作标识符或类型的名称(后面会讨论“定义类型”)。它们是: abstract and as asr assert begin class default delegate do donedowncast downto elif else end exception extern false finally forfun function if in inherit inline interface internal land lazy letlor lsr lxor match member mod module mutable namespace new nullof open or override private public rec return sig static structthen to true try type upcast use val void when while with yield 保留字是指当前还不是关键字,但被F#保留做将来之用。可以用它们来定义标识符或类型名称,但编译器会报告一个警告。如果你在意程序与未来版本编译器的兼容性,最好不要使用。它们是: atomic break checked component const constraint constructor continue eager event external fixed functor global include method mixinobject parallel process protected pure sealed trait virtual volatile 文字值(Literals) 文字值表示常数值,在构建计算代码块时很有用,F#提供了丰富的文字值集。与C#类似,这些文字值包括了常见的字符串、字符、布尔值、整型数、浮点数等,在此不再赘述,详细信息请查看F#手册。 与C#一样,F#中的字符串常量表示也有两种方式。一是常规字符串(regular string),其中可包含转义字符;二是逐字字符串(verbatim string),其中的(")被看作是常规的字符,而两个双引号作为双引号的转义表示。下面这个简单的例子演示了常见的文字常量表示: let message = "Hello World"r"n!" // 常规字符串let dir = @"C:"FS"FP" // 逐字字符串let bytes = "bytes"B // byte 数组let xA = 0xFFy // sbyte, 16进制表示let xB = 0o777un // unsigned native-sized integer,8进制表示let print x = printfn "%A" xlet main = print message; print dir; print bytes; print xA; print xB; main Printf函数通过F#的反射机制和.NET的ToString方法来解析“%A”模式,适用于任何类型的值,也可以通过F#中的print_any和print_to_string函数来完成类似的功能。值和函数(Values and Functions) 在F#中函数也是值,F#处理它们的语法也是类似的。 let n = 10let add a b = a + blet addFour = add 4let result = addFour n printfn "result = %i" result 可以看到定义值n和函数add的语法很类似,只不过add还有两个参数。对于add来说a + b的值自动作为其返回值,也就是说在F#中我们不需要显式地为函数定义返回值。对于函数addFour来说,它定义在add的基础上,它只向add传递了一个参数,这样对于不同的参数addFour将返回不同的值。考虑数学中的函数概念,F(x, y) = x + y,G(y) = F(4, y),实际上G(y) = 4 + y,G也是一个函数,它接收一个参数,这个地方是不是很类似?这种只向函数传递部分参数的特性称为函数的柯里化(curried function)。 当然对某些函数来说,传递部分参数是无意义的,此时需要强制提供所有参数,可是将参数括起来,将它们转换为元组(tuple)。下面的例子将不能编译通过: let sub(a, b) = a - blet subFour = sub 4 必须为sub提供两个参数,如sub(4, 5),这样就很像C#中的方法调用了。 对于这两种方式来说,前者具有更高的灵活性,一般可优先考虑。 如果函数的计算过程中需要定义一些中间值,我们应当将这些行进行缩进: let halfWay a b = let dif = b - a let mid = dif / 2 mid + a 需要注意的是,缩进时要用空格而不是Tab,如果你不想每次都按几次空格键,可以在VS中设置,将Tab字符自动转换为空格;虽然缩进的字符数没有限制,但一般建议用4个空格。而且此时一定要用在文件开头添加#light指令。作用域(Scope)作用域是编程语言中的一个重要的概念,它表示在何处可以访问(使用)一个标识符或类型。所有标识符,不管是函数还是值,其作用域都从其声明处开始,结束自其所处的代码块。对于一个处于最顶层的标识符而言,一旦为其赋值,它的值就不能修改或重定义了。标识符在定义之后才能使用,这意味着在定义过程中不能使用自身的值。 let defineMessage = let message = "Help me" print_endline message // error 对于在函数内部定义的标识符,一般而言,它们的作用域会到函数的结束处。 但可使用let关键字重定义它们,有时这会很有用,对于某些函数来说,计算过程涉及多个中间值,因为值是不可修改的,所以我们就需要定义多个标识符,这就要求我们去维护这些标识符的名称,其实是没必要的,这时可以使用重定义标识符。但这并不同于可以修改标识符的值。你甚至可以修改标识符的类型,但F#仍能确保类型安全。所谓类型安全,其基本意义是F#会避免对值的错误操作,比如我们不能像对待字符串那样对待整数。这个跟C#也是类似的。 let changeType = let x = 1 let x = "change me" let x = x + 1 print_string x 在本例的函数中,第一行和第二行都没问题,第三行就有问题了,在重定义x的时候,赋给它的值是x + 1,而x是字符串,与1相加在F#中是非法的。 另外,如果在嵌套函数中重定义标识符就更有趣了。 let printMessages = let message = "fun value" printfn "%s" message; let innerFun = let message = "inner fun value" printfn "%s" message innerFun printfn "%s" message printMessages 打印结果: fun value inner fun valuefun value 最后一次不是inner fun value,因为在innerFun仅仅将值重新绑定而不是赋值,其有效范围仅仅在innerFun内部。递归(Recursion)递归是编程中的一个极为重要的概念,它表示函数通过自身进行定义,亦即在定义处调用自身。在FP中常用于表达命令式编程的循环。很多人认为使用递归表示的算法要比循环更易理解。 使用rec关键字进行递归函数的定义。看下面的计算阶乘的函数: let rec factorial x = match x with | x when x < 0 -> failwith "value must be greater than or equal to 0" | 0 -> 1 | x -> x * factorial(x - 1) 这里使用了模式匹配(F#的一个很棒的特性),其C#版本为: public static long Factorial(int n) { if (n < 0) { throw new ArgumentOutOfRangeException("value must be greater than or equal to 0"); } if (n == 0) { return 1; } return n * Factorial (n - 1); } 递归在解决阶乘、Fibonacci数列这样的问题时尤为适合。但使用的时候要当心,可能会写出不能终止的递归。匿名函数(Anonymous Function) 定义函数的时候F#提供了第二种方式:使用关键字fun。有时我们没必要给函数起名,这种函数就是所谓的匿名函数,有时称为lambda函数,这也是C#3.0的一个新特性。比如有的函数仅仅作为一个参数传给另一个函数,通常就不需要起名。在后面的“列表”一节中你会看到这样的例子。除了fun,我们还可以使用function关键字定义匿名函数,它们的区别在于后者可以使用模式匹配(本文后面将做介绍)特性。看下面的例子: let x = (fun x y -> x + y) 1 2let x1 = (function x -> function y -> x + y) 1 2let x2 = (function (x, y) -> x + y) (1, 2) 我们可优先考虑fun,因为它更为紧凑,在F#类库中你能看到很多这样的例子。 注意:本文中的代码均在F# 1.9.4.17版本下编写,在F# CTP 1.9.6.0版本下可能不能通过编译。 F#系列随笔索引页面