光芒四射的意思观能cs e1什么意思

反恐精英起源中文版|反恐精英:起源下载中文完整版-乐游网游戏下载
安全的单机游戏下载大全
→ 反恐精英:起源 中文完整版
反恐精英:起源中文完整版( 反恐精英:半条命的升级版本 )
FPS游戏最经典的游戏《反恐精英》给玩家们留下了深刻的印象,虽然游戏出现了很多版本,如今依然坐在FPS的老大位置,作为续作《反恐精英:起源》将给玩家带来更加真实的游戏体验。【游戏介绍】反恐精英:起源这款游戏是原来由原来的CS半条命2做的一款新游戏,虽
游戏大小:1.38G
FPS游戏最经典的游戏《》给玩家们留下了深刻的印象,虽然游戏出现了很多版本,如今依然坐在FPS的老大位置,作为续作《反恐精英:起源》将给玩家带来更加真实的游戏体验。【游戏介绍】反恐精英:起源这款游戏是原来由原来的CS(2)做的一款新游戏,虽然大体上看起来像只是升级版,而玩过的人都会知道其实重要的东西都不在一样了。所有枪的弹道跟后坐力都是重新制作的,枪的特性也有所改变,比如不能再快速给M4或者USP上消音器了,阻击不再像以前那样可以甩了,等等。不过相信当我们重新适应这些新的特性之后,这将是一款非常好的新作,这款作品在画面画质上全面提高了,而且游戏内的一些小的物品不再是装饰,而是可以“动”的比如像小塑料桶,你可以用枪把它射的飞起来,射击铁桶会很自然的让它们发生抖动或者翻倒。新的游戏元素会为你的传统的作战情节增加更多新的花样。《反恐精英:起源》(Counter-Strike:Source)是Valve根据《半条命2》研发出的Source引擎所开发出的一种游戏,所以并不算《半条命》的一个模组(Mod)之一,可以说是与《反恐精英》大大的不同。不论是游戏画面或者游戏人数、地图精致度、武器接口、电脑AI等等,大多与《反恐精英》不同。而CS:S很有可能取代过去在世界各大电玩大赛中《反恐精英》的地位。这款游戏仅有的缺点是,有人抱怨系统需求太高(故不够普遍化)、地图太少等等。【游戏配置】CPU 1.7 GHz 处理器 3.0GHz 或更高内存 512MB显卡 DirectX 8.1级别显卡(需要SSE指令)DirectX 9级别显卡系统 Windows XP(32/64位)【特别说明】因为正版的反恐精英:起源是没有我们熟知的H键菜单的,不过本包内小编已经下好了玩家自制的H菜单补丁,如果进入后按H不能呼出菜单请先点击“PlayGame.exe”的注册之后,在游戏内按“~”键呼出控制台,输入sv_cheats 1即可开启。包内还附赠当前非常火爆的多个MOD包,“CS起源插件lil174合集白金汉化收藏版(14).rar”大家可以自己选择喜欢的打入游戏内。【游戏特色】使用引擎:Source 2004引擎、Source 2009引擎地图人数:比起以往只能支持32人还要多,支持到64人。武器模型:比起《反恐精英:零点行动》或《反恐精英1.6》绝对有大大的不同(采用Source绘图引擎)。游戏画面:由于是HL2的Source引擎,画面酷似半条命2而相当精致。自然法则:Havko引擎拥有的真实的物理法则,让你身处真实世界一般。地图编辑:编辑器版本更新,CS:S地图使用Source SDK中的Valve Hammer Editor 4.1编辑。【控制台命令】fps_max &101&.........................设置显示的最大帧数cl_cmdrate &101&cl_updaterate &101&.........................网络参数cl_c4dynamiclight &1&......................是否开启C4灯光r_propsmaxdist &5000&...............................道具最远可见距离r_decal_cullsize &0& ..........................让贴图可以在任意距离看到r_lod &-5&...........................让模型在任何距离都是最佳状态,需服务器sv_cheats为1cl_ragdoll_collide &1& ............................让布娃娃堆叠(目前无效)mat_mipmaptextures &1&........................开启mip贴图,对FPS影响很大,建议开启jpeg_quality &100& .........................画面质量kill...................自杀rate ......................从server接受信息的速度,太大太小都会延迟,要选适合的timeleft..........让你知道还有几分钟换地图version.......................显示版本信息ping..................显示与服务器的延迟net_graph x...................打开测FPS与联机速的工具 x=1开 x=0关,开启此项多少会减少fpsnet_graphpos x................工具的位置 x=1,2,3net_graphwidth 192............工具的大小volume 0.8....................调整音量大小,实际音量为(volume/hisound)hisound 1.000000..............设定音量最大值,实际音量为(volume/hisound)bgmvolume 1.000000.........背景音效音乐之音量大小disconnect..........离开游戏,保持在CS console状态exit.....................离开游戏,关闭CS,回到桌面quit..........................离开游戏,关闭CS,回到桌面reconnect.....................不离线直接重组联机retry.........................离线并重新联机connect IP....................联机到指定服务器cl_radartype &1&..............实心雷达cl_radaralpha &255.000000&....雷达的透明度cl_autowepswitch &0&..........自动转换威力大的武器&1&为关闭bot_difficulty &3&............机器人难度bot_allow_shield &1&..........机器人智商bot_allow_rogues &1&..........机器人无赖命令bot_stop ''1''..........机器人暂停活动(需要开启作弊模式sv_cheats 1)bot_add...............增加一个机器人bit_kill.....................杀死所有机器人r_shadowrendertotexture &1&..................... 是否绘制高质量阴影。需要r_shadows 为1,推荐开启cl_showfps &1&...................查看fpscl_shoppos &1&...................查看移动速度以及当前人物&视角指向坐标。绝大部分控制台命令相较于CS 1.6来说没什么变化,几乎可以通用。更加详细的内容,请进入CS起源贴吧进行询问。【游戏测评】全球上亿玩家的期待中,作为正统续作的《反恐精英:起源》终于与玩家们见面了,出色的游戏引擎制作的画面确实给玩家们带来了更加真实得战场体验。武器种类并不丰富,大多数还是沿用了上代的枪械,新增加的游戏模式给玩家们确实带来了非常大的乐趣。
安卓官方手机版
IOS官方手机版
其他版本下载
总共 12 款应用
《反恐精英》(英文:Counter-Strike;简称CS)是一种以团队合作为主的射击类网络游戏。1998年,由ValveSoftware公司制作推出,是一款第一人称射击游戏,属于《半条命》(Half-Life)的其中一个游戏模组(MOD)衍生而
总共 77 款应用
最近很多玩家都比较喜欢DayZ独立版这部游戏,虽然是一款生存类游戏,但狙击枪的使用还是需要一些技巧的,特别是狙击枪的珍贵更加让玩家重视狙击枪的来之不易。其实在CS、CF,还有战地系列游戏中,狙击枪可能是用的最
总共 300 款应用
3d射击类单机游戏是单机游戏领域最主流的元素之一,各种高科技的武器被应用,玩家在各种复杂的环境中与敌人战斗,考验你的智能和应变能力,学会潜伏,给予敌人致命一击,场景令人畅快不已。大型的3D单机射击类游戏比
总共 60 款应用
网络的出现,让网游成为中国游戏的主流,网游虽好,但断网之后也只能望机哀叹,无能为力了,局域网游戏的出现弥补了这一缺陷,让同一宿舍的好基友在学校断网之后依然能够徜徉在游戏的海洋,让激情之花发出耀眼的光芒
总共 300 款应用
可以多人玩的游戏通常是指可以三个以上玩家同时进行的游戏和网络游戏区别比较大的就是玩家自己通过局域网或者对战平台进行联机常见的经典多人玩的游戏就如CS、魔兽争霸以及战地等等往往很多经典的单机游戏都会是可以
游戏需要玩家拥有正版steam游戏才能够正确安装。
反恐精英:起源 中文完整版
下载周排行
下载总排行
◎ 我们收集了众多网友经常出现的问题,点击浏览:如果下载的时候提示 &Service Unavailable& ?请务必使用
下载本站游戏!
◎ 游戏1号群:336883(满),游戏2号群:,欢迎加入。
◎ 提供 反恐精英:起源
中文破解版,保证完全无毒病,请大家放心下载.
◎ 本站仅创建用户沟通交流的平台,所展示的游戏资源内容均来自于用户上传分享,版权问题均与我站无关。资源仅作为用户间分享讨论之用,如该游戏触犯了您的权利,请发送至邮箱:,我们第一时间给予删除。&p&&i&摘要:&/i&性能优化不管是从方法论还是从实践上都有很多东西,本系列的文章会从C++语言本身入手,介绍一些性能优化的方法,希望能做到简洁实用。&/p&&p&作者:ali4846j3o&/p&&p&原文:&a href=&http://link.zhihu.com/?target=http%3A//click.aliyun.com/m/41845/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&click.aliyun.com/m/4184&/span&&span class=&invisible&&5/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&h2&&b&前言&/b&&/h2&&p&性能优化不管是从方法论还是从实践上都有很多东西,本系列的文章会从C++语言本身入手,介绍一些性能优化的方法,希望能做到简洁实用。&/p&&h2&&b&实例1&/b&&/h2&&p&在开始本文的内容之前,让我们看段小程序:&/p&&figure&&img src=&http://pic1.zhimg.com/v2-19b7a06a82d888be8c2c6b14e6f31694_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&690& data-rawheight=&198& class=&origin_image zh-lightbox-thumb& width=&690& data-original=&http://pic1.zhimg.com/v2-19b7a06a82d888be8c2c6b14e6f31694_r.jpg&&&/figure&&p&如果要对这段代码进行优化,你认为瓶颈会是什么呢?代码-g -O2后看一眼汇编:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-c1eb3c43d23d096a6e86d93c68f2b0d3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&691& data-rawheight=&385& class=&origin_image zh-lightbox-thumb& width=&691& data-original=&http://pic4.zhimg.com/v2-c1eb3c43d23d096a6e86d93c68f2b0d3_r.jpg&&&/figure&&p&指令已经很少了,有多少优化空间呢?先不着急,看看下面这段代码&/p&&figure&&img src=&http://pic1.zhimg.com/v2-4cb2e0a8dbb9bef514f8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&691& data-rawheight=&639& class=&origin_image zh-lightbox-thumb& width=&691& data-original=&http://pic1.zhimg.com/v2-4cb2e0a8dbb9bef514f8_r.jpg&&&/figure&&p&写了一个小程序,digits10_v2 比 digits10_v1快了45%, digits10_v3 比digits10_v1快了60%+。&/p&&p&不难看出测试结论跟数据的取值范围相关,就本例来说数值越大,提升越明显。是什么原因呢?附测试程序:&/p&&figure&&img src=&http://pic2.zhimg.com/v2-888e522dda964b98f6ec2cc6de824289_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&593& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic2.zhimg.com/v2-888e522dda964b98f6ec2cc6de824289_r.jpg&&&/figure&&figure&&img src=&http://pic2.zhimg.com/v2-94af07b8606aec1b959d69e34a6c7b09_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&702& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&702& data-original=&http://pic2.zhimg.com/v2-94af07b8606aec1b959d69e34a6c7b09_r.jpg&&&/figure&&h2&&b&Strength reduction&/b&&/h2&&p&优化原因不是因为做了循环展开,而是由于不同指令本身的速度就是不一样的,比较、整型的加减、位操作速度都是最快的,而除法/取余却很慢。&/p&&p&下面有一个更详细的列表,为了更直观一些,用了clock cycle来衡量,不过这里的clock cycle是个平均值,不同的CPU还是稍有差异:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-253ccaa1f27aa2aad1eb2987aeb03477_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&182& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&http://pic4.zhimg.com/v2-253ccaa1f27aa2aad1eb2987aeb03477_r.jpg&&&/figure&&p&虽然大多数场景下,数学运算都不会有太多性能问题,但相对来说,整型的除法运算还是比较昂贵的。编译器就会利用这一特点进行优化,一般称作Strength reduction.&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&对于前面的例子,核心原因是digits10_v2用比较和加法来减少除法(/=)操作,digits10_v3通过搜索的方式进一步减少了除法操作。
&/code&&/pre&&/div&&p&由于cpu并行处理技术,我们不能简单的用后面的clock cycle来衡量性能,但不难看出处理器对类型的还是非常敏感的,以整型和浮点的处理为例:&/p&&h2&整型&/h2&&p&&b&类型转换&/b&&/p&&ul&&li&ints--& short/char (0~1 clock cycle)&/li&&li&ints --& float/double (4~16个clock cycle), signed ints 快于 unsigned ints,唯一一个场景signed比unsigned快的&/li&&li&short/char的计算通常使用32bit存储,只是返回的时候做了截取,故只在要考虑内存大小的时候才使用short/char,如array&/li&&li&注:隐式类型转换可能会溢出,有符号的溢出变成负数,无符号的溢出变成小的整数&/li&&/ul&&p&&b&运算&/b&&/p&&ul&&li&除法、取余运算unsigned ints 快于 signed ints&/li&&li&除以常量比除以变量效率高,因为可以在编译期做优化,尤其是常量可以表示成2^n时&/li&&li&++i和i++本身性能一样,但不同的语境效果不一样,如array[i++]比arry[++i]性能好;当依赖自增结果时,++i性能更好,如a=++b,a和b可复用同一个寄存器&/li&&/ul&&p&&b&代码示例&/b&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-df62d41a302b30e088dfdb910bbe5431_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&697& data-rawheight=&161& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&http://pic2.zhimg.com/v2-df62d41a302b30e088dfdb910bbe5431_r.jpg&&&/figure&&h2&浮点&/h2&&ul&&li&单精度、双精度的计算性能是一样的&/li&&li&常量的默认精度是双精度&/li&&li&不要混淆单精度、双精度,混合精度计算会带来额外的精度转换开销,如&/li&&/ul&&figure&&img src=&http://pic4.zhimg.com/v2-a38f43ffabe6f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&697& data-rawheight=&203& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&http://pic4.zhimg.com/v2-a38f43ffabe6f_r.jpg&&&/figure&&ul&&li&浮点除法比乘法慢很多,故可以利用乘法来加快速度,如&/li&&/ul&&figure&&img src=&http://pic4.zhimg.com/v2-472b0b016c04d3625d5ecbdf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&106& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic4.zhimg.com/v2-472b0b016c04d3625d5ecbdf_r.jpg&&&/figure&&p&这里介绍的大多是编译器的擅长但又不能直接优化的场景,也是平常优化中比较容易忽视的点,其实往往我们往前多走一步,编译器就可以工作得更好。&/p&&h2&&b&实例2&/b&&/h2&&p&先看一个数字转字符串的例子,stringstream和sprintf 自然不会是我们考虑的对象,虽然protobuf库中的FastInt32ToBuffer很不错,其实还能优化,下面的版本就比例子中stringstream快6倍,代码如下:&/p&&figure&&img src=&http://pic2.zhimg.com/v2-cfc09ced1f207d93a779_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&314& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&http://pic2.zhimg.com/v2-cfc09ced1f207d93a779_r.jpg&&&/figure&&p&不用细读stringstream/sprintf的源码,反汇编看下就能知道个大概,对于转字符串这个场景,stringstream/sprintf就太重了,通常来说越少的指令性能也越好(如果你读过本系列的上一篇&a href=&http://link.zhihu.com/?target=http%3A//www.atatech.org/articles/18083& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&c++性能优化(一) ---- 从简单类型开始&/a&,不难发现,这句话也不正确,呵呵)。但本文讨论的重点是内存访问,就上面这段代码,有什么内存使用上的问题?如何进一步优化?&/p&&h2&&b&分析&/b&&/h2&&p&优化前还是得找一下性能热点,下面是vtune结果的截图(虽然cpu time和汇编指令的消耗对应得不是特别好):&/p&&figure&&img src=&http://pic1.zhimg.com/v2-d5de550dab374cd137cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&996& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&996& data-original=&http://pic1.zhimg.com/v2-d5de550dab374cd137cf_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-045a8b88a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1191& data-rawheight=&755& class=&origin_image zh-lightbox-thumb& width=&1191& data-original=&http://pic3.zhimg.com/v2-045a8b88a_r.jpg&&&/figure&&p&数组reverse的开销跟上面生成数组元素相近,reverse有这么耗时么?&/p&&p&从图中的汇编可以看出,一次swap对应着两次内存读(movzxb)、两次内存写(movb),因为一次写就意味着一个读和一个写,描述的是内存--&cache--&内存的过程。&/p&&h2&&b&优化&/b&&/h2&&h2&减少内存写操作&/h2&&p&一个很自然的优化想法,应该尽量避免内存写操作,于是代码可以进一步优化,结合 Strength reduction,代码如下:&/p&&figure&&img src=&http://pic2.zhimg.com/v2-c1b4a5c31f7df55dd6e7aa5b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic2.zhimg.com/v2-c1b4a5c31f7df55dd6e7aa5b_r.jpg&&&/figure&&p&实测发现新版本比之前版本性能提升了10%,还有优化空间么?答案是,有。方案是:通过查表,一次处理2个数字,减少数据依赖,如:&/p&&figure&&img src=&http://pic3.zhimg.com/v2-9db69f069aebae3872bbfdca60ab359e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&705& data-rawheight=&563& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&http://pic3.zhimg.com/v2-9db69f069aebae3872bbfdca60ab359e_r.jpg&&&/figure&&p&结论:&/p&&ol&&li&u64ToAscii_v3性能比基准版本提升了30%;&/li&&li&如果用到悟时的那个测试场景,性能可以提升6.5倍。&/li&&/ol&&p&下面是完整的测试代码和结果:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-ff0cfd42c40b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&698& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&http://pic4.zhimg.com/v2-ff0cfd42c40b_r.jpg&&&/figure&&figure&&img src=&http://pic2.zhimg.com/v2-86ac2e1f132d94fcc6c30cc2fdad841d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&698& data-rawheight=&648& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&http://pic2.zhimg.com/v2-86ac2e1f132d94fcc6c30cc2fdad841d_r.jpg&&&/figure&&figure&&img src=&http://pic2.zhimg.com/v2-22b16cf7d73aa8ba98241d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&697& data-rawheight=&791& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&http://pic2.zhimg.com/v2-22b16cf7d73aa8ba98241d_r.jpg&&&/figure&&figure&&img src=&http://pic3.zhimg.com/v2-2d787ef0dad6bbcf23c483ea0dc651fe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&697& data-rawheight=&805& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&http://pic3.zhimg.com/v2-2d787ef0dad6bbcf23c483ea0dc651fe_r.jpg&&&/figure&&figure&&img src=&http://pic4.zhimg.com/v2-1d948dba6b732a4b3b9ba9fbec29be97_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&292& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&http://pic4.zhimg.com/v2-1d948dba6b732a4b3b9ba9fbec29be97_r.jpg&&&/figure&&p&看到优化写内存操作的威力了吧,让我们再看一个减少写操作的例子:&/p&&figure&&img src=&http://pic1.zhimg.com/v2-17bc73e8d2dec05d4bac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&222& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic1.zhimg.com/v2-17bc73e8d2dec05d4bac_r.jpg&&&/figure&&p&假定A、B、C都很小,且不会溢出,可以写成&/p&&figure&&img src=&http://pic4.zhimg.com/v2-e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&692& data-rawheight=&235& class=&origin_image zh-lightbox-thumb& width=&692& data-original=&http://pic4.zhimg.com/v2-e_r.jpg&&&/figure&&p&如果需要考虑溢出,也可以改为&/p&&figure&&img src=&http://pic1.zhimg.com/v2-af6cba3feac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&691& data-rawheight=&48& class=&origin_image zh-lightbox-thumb& width=&691& data-original=&http://pic1.zhimg.com/v2-af6cba3feac_r.jpg&&&/figure&&h2&读取效率&/h2&&p&对于内存的写,最好的办法就是减少写的次数,那么内存的读取呢?&br&教科书的答案是:尽可能顺序访问内存。理解这句话还是得从cache line开始,因为实际的cpu比较复杂,下面的表述尝试做些简化,如有问题,欢迎指正:&/p&&p&&b&cache line&/b&&/p&&ul&&li&假设L1cache大小为8K,cache line 64字节、4way,那么整个cache会分成32个集合,&br&8&i&=32&/i&4,一个内存地址进入哪个cache line不是任意的,而是确定在某个集合中,可以通过公式(set ) = (memory&/li&&/ul&&p&address) / ( line size) % (number of sets )来计算,如地址是10000,则(set)= = 28, 即编号为28的集合内的4个cache line之一。&/p&&ul&&li&用16进制来描述,0,一次内存读取是64bytes,那么访问内存地址10000即意味着地址0xF都进集合编号为28(0x1C)的cache line中了。&/li&&/ul&&p&&b&cache miss&/b&&/p&&p&可以看出,顺序的访问内存是能够比较高效而且不会因为cache冲突,导致药频繁读取内存。那什么的情况会导致cache miss呢?&/p&&ul&&li&当某个集合内的cache line都有数据时,且该集合内有新的数据就会导致老数据的换出,进而访问老数据就会出现cache miss。&/li&&li&以先后读取0xF00, 0xF00, 0x4700为例, 这几个地址都在28这个编号的集合内,当去读0x4700时,假定CPU都是以先进先出策略,那么0x2710就会被换出,这时候如果再访问0xF的数据就cache miss,需要重新访问内存了。&/li&&li&可以看出变量是否有cache 竞争,得看变量地址间的距离,distance = (number of sets ) &i&(line size) = ( total cache size) / ( number of ways) , 即距离为32&/i&64 = 8K/4= 2K的内存访问都可能产生竞争。&/li&&li&上面这些不光对变量、对象有用,对代码cache也是如此。&/li&&/ul&&h2&建议&/h2&&p&对于内存的访问,可以考虑以下一些建议:&/p&&ol&&li&一起使用的函数存储在一起。函数的存储通常按照源码中的顺序来的,如果函数A,B,C是一起调用的,那尽量让ABC的声明也是这个顺序&/li&&li&一起使用的变量存储在一起。使用结构体、对象来定义变量,并通过局部变量方式来声明,都是一些较好的选择。例子见后文:&/li&&li&合理使用对齐(__attribute__((aligned(64)))、预取(prefecting data),让一个cacheline能获取到更多有效的数据&/li&&li&动态内存分配、STL容器、string都是一些常容易cache不友好的场景,核心代码处尽量不用&/li&&/ol&&figure&&img src=&http://pic2.zhimg.com/v2-0d2fd31baecf782d29ad7d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&http://pic2.zhimg.com/v2-0d2fd31baecf782d29ad7d_r.jpg&&&/figure&&h2&静态变量&/h2&&p&让我们再回到最前面的优化,u64ToAscii_v3引入了局部静态变量(digits),是否合适?通常来说,要具体问题具体分析,没有标准答案。&/p&&p&静态变量和栈地址是分开的,可能会带来cache miss的问题,通过去掉static修饰符,直接在栈上声明变的方式可以避免,但这种做法可行有几个前提条件:&/p&&ol&&li&变量大小是要限制的,不超出cache的大小(最好是L1 cache)&/li&&li&变量的初始化在栈上完成,故最好不要在循环内部定义,以避免不必要的初始化。&/li&&/ol&&p&其实内存访问和CPU运算是没有一定的赢家,真正做优化时,需要结合具体的场景,仔细测量才能得到答案。&/p&&h2&回顾&/h2&&p&前面两个实例分别从编译器和内存使用的角度介绍了一些性能优化的方法,后面内容则会回到cpu,从指令并行的角度看看我们常见的逻辑控制有哪些可以优化的点。&/p&&figure&&img src=&http://pic1.zhimg.com/v2-dc27f3c7b04faac20c0c8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&692& data-rawheight=&44& class=&origin_image zh-lightbox-thumb& width=&692& data-original=&http://pic1.zhimg.com/v2-dc27f3c7b04faac20c0c8_r.jpg&&&/figure&&h2&流水线&/h2&&p&通常一个CPU可以并行执行多条指令,如:4条浮点乘法,等待4个内存访问、一个还为到来的分支比较,不同的运算单元也是可以并行计算,如for(int i = 0; i & N; ++i) a[i]=i&i&0.2; 这里的i & N和++i 在i&/i&0.2可以同时执行。提升指令并行能力,往往就能达到提升性能的目的。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&从流水线的角度看,指令pipeline的几个阶段:fetch、decode、execute、memory-access、write-back,除了存储器的访问效率会影响并行度外,下一条指令的fetch/decode也很关键,而跳转和分支则是又一个拦路虎,这也是本文接下去要主要分析的地方:
&/code&&/pre&&/div&&h2&&b&函数&/b&&/h2&&h2&本身开销&/h2&&ul&&li&函数调用使得处理器跳到另外一个代码地址并回来,一般需要4 clock cycles,大多数情况处理器会把函数调用、返回和其他指令一起执行以节约时间。&/li&&li&函数参数存储在栈上需要额外的时间( 包括栈帧的建立、saving and restoring registers、可能还有异常信息)。在64bit linux上,前6个整型参数(包括指针、引用)、前8个浮点参数会放到寄存器中;64bit windows上不管整型、浮点,会放置4个参数。&/li&&li&在内存中过于分散的代码可能会导致较差的code cache&/li&&/ul&&h2&常见的优化手段&/h2&&ol&&li&避免不必要的函数,特别在最底层的循环,应该尽量让代码在一个函数内。看起来与良好的编码习惯冲突(一个函数最好不要超过80行),其实不然,跟这个系列其他优化一样,我们应该知道何时去使用这些优化,而不是一上来就让代码不可读。&/li&&li&尝试使用inline函数,让函数调用的地方直接用函数体替换。inline对编译器来说是个建议,而且不是inline了性能就好,一般当函数比较小或者只有一个地方调用的时候,inline效果会比较好&/li&&li&在函数内部使用循环(e.g., change for(i=0;i&100;i++) DoSomething(); into DoSomething()&br&{ for(i=0;i&100;i++) { ... } } )&/li&&li&减少函数的间接调用,如偏向静态链接而不是动态链接,尽量少用或者不用多继承、虚拟继承&/li&&li&优先使用迭代而不是递归&/li&&li&使用函数来替换define,从而避免多次求值。宏的其他缺点:不能overload和限制作用域(undef除外)&/li&&/ol&&figure&&img src=&http://pic4.zhimg.com/v2-ba4b98c8a0cdbe5ce1b6c5b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&202& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic4.zhimg.com/v2-ba4b98c8a0cdbe5ce1b6c5b_r.jpg&&&/figure&&h2&&b&分支预测&/b&&/h2&&h2&应用场景&/h2&&p&常见的分支预测场景有if/else,for/while,switch,预测正确0~2 clock cycles,错误恢复12~25 clock cycles。&/p&&p&一般应用分支预测的正确率在90%以上,但个位数的误判率对有较多分支的程序来说影响还是非常大的。分支预测的技术(或者说策略)非常多,这里不会展开介绍,对写程序来说,我们知道越简单的场景越容易预测正确:如分支都在在一个循环内或者几乎没有其他分支。&/p&&h2&关键因素&/h2&&p&如果对分支预测的概念和作用还不清楚的话,可以看看后面的参考文档。几个影响分支预测因素:&/p&&p&&b&branch target buffer (BTB)&/b&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-5a86d12b937dba9f1c1a8b47d7e10015_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&67& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&http://pic2.zhimg.com/v2-5a86d12b937dba9f1c1a8b47d7e10015_r.jpg&&&/figure&&p&&b&Return Address Stack (RAS)&/b&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-cc1bfa2b83d94f5da145710fca300f32_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&http://pic3.zhimg.com/v2-cc1bfa2b83d94f5da145710fca300f32_r.jpg&&&/figure&&h2&常见的优化手段&/h2&&p&&b&消除条件分支&/b&&/p&&ul&&li&代码实例&/li&&/ul&&figure&&img src=&http://pic3.zhimg.com/v2-6abf4019cc3dde4e128aaa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&698& data-rawheight=&124& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&http://pic3.zhimg.com/v2-6abf4019cc3dde4e128aaa_r.jpg&&&/figure&&ul&&li&优化版本1&/li&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-d77e8deebf624dc77d9c3d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&692& data-rawheight=&64& class=&origin_image zh-lightbox-thumb& width=&692& data-original=&http://pic2.zhimg.com/v2-d77e8deebf624dc77d9c3d_r.jpg&&&/figure&&ul&&li&优化版本2&/li&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-3e21b8a545bfd58dc01389af46fbada5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&64& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&http://pic2.zhimg.com/v2-3e21b8a545bfd58dc01389af46fbada5_r.jpg&&&/figure&&ul&&li&优化版本3&/li&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-4d9f762eb9bcafc2671d8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&65& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&http://pic1.zhimg.com/v2-4d9f762eb9bcafc2671d8_r.jpg&&&/figure&&p&&b&bool类型变换&/b&&/p&&ul&&li&实例代码&/li&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-fa6ecdfd2d88_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&http://pic1.zhimg.com/v2-fa6ecdfd2d88_r.jpg&&&/figure&&ul&&li&编译器的行为是&/li&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-cbe262dd5c06f093efabcc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&506& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&http://pic1.zhimg.com/v2-cbe262dd5c06f093efabcc_r.jpg&&&/figure&&ul&&li&优化版本&/li&&/ul&&figure&&img src=&http://pic4.zhimg.com/v2-4bc7d91ebeaafe26fd1cb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&82& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&http://pic4.zhimg.com/v2-4bc7d91ebeaafe26fd1cb_r.jpg&&&/figure&&ul&&li&实例代码2&/li&&/ul&&figure&&img src=&http://pic4.zhimg.com/v2-ed738fb0fee12d457dc62af_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&125& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&http://pic4.zhimg.com/v2-ed738fb0fee12d457dc62af_r.jpg&&&/figure&&ul&&li&反例&/li&&/ul&&p&a && b 何时不能转换成a & b,当a不可能为false的情况下&/p&&p&a | | b 何时不能转换成a | b,当a不可能为true的情况下&/p&&p&&b&循环展开&/b&&/p&&ul&&li&实例代码&/li&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-3e414c29d29a3da6fe95a1b8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&223& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&http://pic1.zhimg.com/v2-3e414c29d29a3da6fe95a1b8_r.jpg&&&/figure&&ul&&li&优化版本&/li&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-d228cd3ce10cebad5d9d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&698& data-rawheight=&165& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&http://pic2.zhimg.com/v2-d228cd3ce10cebad5d9d_r.jpg&&&/figure&&ul&&li&优化说明&/li&&ul&&li&优点:减少比较次数、某些CPU上重复次数越少预测越准、去掉了if判断&/li&&li&缺点:需要更多的code cache or micro-op cache、有些处理器(core 2)对于小循环性能很好(小于65bytes code)、循环的次数和展开的个数不匹配&/li&&li&一般编译器会自动展开循环,程序员不需要主动去做,除非有一些明显优点,比如减少上面的if判断&/li&&/ul&&/ul&&p&&b&边界检查&/b&&/p&&ul&&li&实例代码1&/li&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-fbbc0095adb29_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&http://pic2.zhimg.com/v2-fbbc0095adb29_r.jpg&&&/figure&&ul&&li&实例代码2&/li&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-f01dfaafddfec087a1fd29_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&162& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&http://pic2.zhimg.com/v2-f01dfaafddfec087a1fd29_r.jpg&&&/figure&&p&&b&使用数组&/b&&/p&&ul&&li&实例代码1&/li&&/ul&&figure&&img src=&http://pic3.zhimg.com/v2-aa5cfddf82a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&166& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic3.zhimg.com/v2-aa5cfddf82a_r.jpg&&&/figure&&ul&&li&实例代码2&/li&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-33e1ca3ebb8c3f13cd9fb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&698& data-rawheight=&105& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&http://pic1.zhimg.com/v2-33e1ca3ebb8c3f13cd9fb_r.jpg&&&/figure&&p&&b&整形的bit array语义,适用于enum、const、define&/b&&/p&&figure&&img src=&http://pic4.zhimg.com/v2-d36c47b3edab60f6554ee18abce0e533_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&350& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&http://pic4.zhimg.com/v2-d36c47b3edab60f6554ee18abce0e533_r.jpg&&&/figure&&h2&本块小结&/h2&&ul&&li&尽可能的减少跳转和分支&/li&&li&优先使用迭代而不是递归&/li&&li&对于长的if...else,使用switch case,以减少后面条件的判断,把最容易出现的条件放在最前面&/li&&li&为小函数使用inline,减少函数调用开销&/li&&li&在函数内使用循环&/li&&li&在跳转之间的代码尽量减少数据依赖&/li&&li&尝试展开循环&/li&&li&尝试通过计算来消除分支&/li&&/ul&&h2&&b&参考文档&/b&&/h2&&p&&&深入理解计算机系统&&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Instruction_pipelining& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&en.wikipedia.org/wiki/I&/span&&span class=&invisible&&nstruction_pipelining&/span&&span class=&ellipsis&&&/span&&/a&
&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//web.cecs.pdx.edu/%7Ealaa/ece587/notes/bpred-6up.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&web.cecs.pdx.edu/~alaa/&/span&&span class=&invisible&&ece587/notes/bpred-6up.pdf&/span&&span class=&ellipsis&&&/span&&/a&
&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//cseweb.ucsd.edu/%7Ej2lau/cs141/week8.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cseweb.ucsd.edu/~j2lau/&/span&&span class=&invisible&&cs141/week8.html&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Branch_predictor& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&en.wikipedia.org/wiki/B&/span&&span class=&invisible&&ranch_predictor&/span&&span class=&ellipsis&&&/span&&/a&
&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Branch_target_predictor& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&en.wikipedia.org/wiki/B&/span&&span class=&invisible&&ranch_target_predictor&/span&&span class=&ellipsis&&&/span&&/a&
&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www-ee.eng.hawaii.edu/%7Etep/EE461/Notes/ILP/buffer.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&www-ee.eng.hawaii.edu/~&/span&&span class=&invisible&&tep/EE461/Notes/ILP/buffer.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//book.51cto.com/art/03.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&book.51cto.com/art/2008&/span&&span class=&invisible&&04/70903.htm&/span&&span class=&ellipsis&&&/span&&/a&
&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Strength_reduction& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&en.wikipedia.org/wiki/S&/span&&span class=&invisible&&trength_reduction&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/53920& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&facebook.com/notes/face&/span&&span class=&invisible&&book-engineering/three-optimization-tips-for-c/53920&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//people.cs.clemson.edu/%7Edhouse/courses/405/papers/optimize.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&people.cs.clemson.edu/~&/span&&span class=&invisible&&dhouse/courses/405/papers/optimize.pdf&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.agner.org/optimize/optimizing_cpp.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&agner.org/optimize/opti&/span&&span class=&invisible&&mizing_cpp.pdf&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&更多技术干货敬请关注云栖社区知乎机构号:&a href=&https://www.zhihu.com/org/a-li-yun-yun-qi-she-qu-48& class=&internal&&阿里云云栖社区 - 知乎&/a&&/b&&/p&
摘要:性能优化不管是从方法论还是从实践上都有很多东西,本系列的文章会从C++语言本身入手,介绍一些性能优化的方法,希望能做到简洁实用。作者:ali4846j3o原文:前言性能优化不管是从方法论还是从实践上都有很多东西,本系列的文章…
&p&首先献上一些好的编程网站:&/p&&p&&b&1、在线编程练习:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LintCode &i class=&icon-external&&&/i&&/a&——在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考&br&(&a href=&//link.zhihu.com/?target=http%3A//www.jiuzhang.com/solutions& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lintcode 标准答案查询&i class=&icon-external&&&/i&&/a&——lintcode 参考答案网站,提供最优解)&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.codecademy.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codecademy&i class=&icon-external&&&/i&&/a&——包含在线编程练习和课程视频&br&&a href=&//link.zhihu.com/?target=https%3A//codehs.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CodeHS&i class=&icon-external&&&/i&&/a&——包含数据结构、游戏设计、动画类编程题&br&&a href=&//link.zhihu.com/?target=https%3A//www.codechef.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codechef&i class=&icon-external&&&/i&&/a&——题目难度从入门、简单、中等到挑战都有,会举办竞赛,获胜者会有奖金&br&&a href=&//link.zhihu.com/?target=https%3A//programmingpraxis.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Praxis&i class=&icon-external&&&/i&&/a&——此网站编程练习不保存分数、不排名、不竞赛&br&&a href=&//link.zhihu.com/?target=https%3A//projecteuler.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Project Euler&i class=&icon-external&&&/i&&/a&——有590道题,会显示难度水平和提交完成率&br&&a href=&//link.zhihu.com/?target=https%3A//www.topcoder.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Topcoder&i class=&icon-external&&&/i&&/a&——全球性的大型开发社区,可在线编程测评&br&&a href=&//link.zhihu.com/?target=https%3A//www.hackerearth.com/zh/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HackerEarth&i class=&icon-external&&&/i&&/a&——注册帐号后可参与编程练习(有内推到知名企业的机会)&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//leetcode.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LeetCode&i class=&icon-external&&&/i&&/a&——在线刷题网站,在线编程刷题、在线判题&br&&br&其他细分:&br&&b&针对初学者:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.reddit.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reddit&i class=&icon-external&&&/i&&/a&——包含有趣的编程挑战题,即使不会写,也可以查看他人的解决方法&br&&a href=&//link.zhihu.com/?target=http%3A//programmingbydoing.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming by Doing&i class=&icon-external&&&/i&&/a&——对于零基础的初学者,是很好的选择&br&&a href=&//link.zhihu.com/?target=http%3A//www.codeabbey.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CodeAbbey&i class=&icon-external&&&/i&&/a&——从最简单的开始,题目难度不断增加&br&&a href=&//link.zhihu.com/?target=http%3A//rosettacode.org/wiki/Rosetta_Code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rosetta Code&i class=&icon-external&&&/i&&/a&——包含大量的小程序&br&&a href=&//link.zhihu.com/?target=https%3A//www.nayuki.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Project Nayuki&i class=&icon-external&&&/i&&/a&——包含很多小型挑战题&br&&b&想要做项目却没有好点子:&/b& &/p&&p&&a href=&//link.zhihu.com/?target=http%3A//dreamincode.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dreamincode&i class=&icon-external&&&/i&&/a&——提供从初级到中级大约125个项目ideas&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Github&i class=&icon-external&&&/i&&/a&——可以审查代码、管理项目,与数百万用户一起开发软件。&br&&b&编程竞赛:&/b& &a href=&//link.zhihu.com/?target=https%3A//www.hackerrank.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HackerRank&i class=&icon-external&&&/i&&/a&——包含编程题和项目开发挑战&br&&a href=&//link.zhihu.com/?target=https%3A//www.codechef.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codechef&i class=&icon-external&&&/i&&/a&——包含编程竞赛、在线程序设计挑战&br&&a href=&//link.zhihu.com/?target=https%3A//www.techgig.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Techgig&i class=&icon-external&&&/i&&/a&——提供新闻、直播课、在线判题系统和企业招聘信息&br&&a href=&//link.zhihu.com/?target=https%3A//www.topcoder.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Topcoder&i class=&icon-external&&&/i&&/a&——通过众包提供更便捷的业务(包含上百万的设计和技术专家)&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.spoj.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sphere Online Judge (SPOJ)&i class=&icon-external&&&/i&&/a&——在线判题系统,会根据提交的正确率进行排名,遇到问题可以在讨论区交流&br&&br&&b&可共享代码:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//ideone.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ideone&i class=&icon-external&&&/i&&/a&——在线编译器,可运行,可查看代码示例&br&&br&&b&2、教程类:(大型开放式网络课程或者文字教程)&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.jiuzhang.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&九章算法&i class=&icon-external&&&/i&&/a&——专业的程序员IT教育培训,由硅谷工程师主讲,已帮助数万人找到好工作。&br&&a href=&//link.zhihu.com/?target=http%3A//www.codeschool.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codeschool&i class=&icon-external&&&/i&&/a&——有经验的开发人员的交互式学习平台。&br&&a href=&//link.zhihu.com/?target=http%3A//www.udemy.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Udemy&i class=&icon-external&&&/i&&/a&——全球性的在线学习平台,可以从45000多个专家导师的视频中学习技能,实现自己的学习目标。&br&&a href=&//link.zhihu.com/?target=http%3A//www.geeksforgeeks.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Geeksforgeeks&i class=&icon-external&&&/i&&/a&——提供很多问题的优质解答&br&&a href=&//link.zhihu.com/?target=http%3A//www.codeavengers.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codeavengers&i class=&icon-external&&&/i&&/a&——提供HTML5、CSS3、Javascript的课程&br&&a href=&//link.zhihu.com/?target=http%3A//www.teamtreehouse.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Teamtreehouse&i class=&icon-external&&&/i&&/a&——课程具有导向作用,对于新手程序员有很完备的课程计划和训练课程&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.hiredintech.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hiredintech&i class=&icon-external&&&/i&&/a& ——提供有关系统设计、面试策略、软技能等内容的课程&br&&a href=&//link.zhihu.com/?target=http%3A//www.good-tutorials.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Newest Tutorials&i class=&icon-external&&&/i&&/a&——包含大量css、HTML、Java、PHP、Flash等相关知识的教程。&br&&a href=&//link.zhihu.com/?target=https%3A//www.edx.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Edx&i class=&icon-external&&&/i&&/a&——上千个课程(包含系统设计、Android开发、Python等课程)&br&&a href=&//link.zhihu.com/?target=http%3A//web.mit.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Massachusetts Institute of Technology (MIT)&i class=&icon-external&&&/i&&/a&——计算机科学技术、编程导论等知识的介绍&br&&br&&b&3、编程技巧类:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.tutorialspoint.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tutorialspoint&i class=&icon-external&&&/i&&/a&——这是一个数字图书馆,你可以借助 -事例、视频等来学习任何软件技术。&br&&a href=&//link.zhihu.com/?target=http%3A//www.freecodecamp.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Freecodecamp&i class=&icon-external&&&/i&&/a&——帮助你完成编程挑战、做项目并获得证书。&br&&a href=&//link.zhihu.com/?target=http%3A//www.w3schools.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://www.w3schools.com&i class=&icon-external&&&/i&&/a&——可以学习所有热门web技术的网站。&br&&a href=&//link.zhihu.com/?target=http%3A//www.venturebeat.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Venturebeat&i class=&icon-external&&&/i&&/a&——提供创新视角,进行开创性的研究,帮助技术爱好者作出明智的决定。&br&&a href=&//link.zhihu.com/?target=http%3A//www.norvig.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Norvig&i class=&icon-external&&&/i&&/a&——自学编程,经历超过十年的程序员的总结&br&&a href=&//link.zhihu.com/?target=http%3A//www.sixrevisions.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sixrevisions&i class=&icon-external&&&/i&&/a&——包含css、Javascript、HTML、Web Design等热门技术的技巧介绍&br&&a href=&//link.zhihu.com/?target=http%3A//www.artima.com/index.jsp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Artima&i class=&icon-external&&&/i&&/a&——包含编程技巧的文章、科技新闻等&br&&a href=&//link.zhihu.com/?target=https%3A//www.kevinlondon.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Kevin London's blog&i class=&icon-external&&&/i&&/a&——Kevin London的博客,通过代码事例来讲解技巧&br&&br&&b&编程风格:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/google& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google&i class=&icon-external&&&/i&&/a&——C++代码风格指导&br&&a href=&//link.zhihu.com/?target=https%3A//www.reddit.com/r/learnprogramming/comments/1i4ds4/what_are_some_bad_coding_habits_you_would/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What are some bad coding habits you would recommend a beginner avoid getting into? &i class=&icon-external&&&/i&&/a&——程序员应避免的不良编程习惯介绍&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.reddit.com/r/C_Programming/comments/1vuubw/good_c_programming_habits/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Good C programming habits. &i class=&icon-external&&&/i&&/a&——好的编程习惯介绍&br&&a href=&//link.zhihu.com/?target=http%3A//umich.edu/%7Eeecs381/generalFAQ/Debugging.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Debugging&i class=&icon-external&&&/i&&/a&——介绍程序调试时的常见问题&br&&a href=&//link.zhihu.com/?target=http%3A//www.codebetter.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codebetter.com&i class=&icon-external&&&/i&&/a&——教你如何写出更优代码&/p&&p&&b&编程语言:&/b&(JAVA)&br&&a href=&//link.zhihu.com/?target=http%3A//www.artima.com/java/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java Corner at Artima.com&i class=&icon-external&&&/i&&/a&——包含java题和答案、相关新闻&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//netbeans.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NetBeans&i class=&icon-external&&&/i&&/a&——提供开源代码、软件,帮助你更快速地学习软件、应用开发&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//xyzws.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XyzWS&i class=&icon-external&&&/i&&/a&——包含大量java面试题&br&&a href=&//link.zhihu.com/?target=http%3A//www.javaworld.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JavaWorld&i class=&icon-external&&&/i&&/a&——包含java知识、编程技巧、开源代码开发项目&br&&br&&b&4、社区类:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.quora.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Quora&i class=&icon-external&&&/i&&/a&——问答形式的网站,各种各样的问题都能得到来自不同网友的解答(美国版的知乎)。&br&&a href=&//link.zhihu.com/?target=http%3A//www.stackoverflow.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stackoverflow&i class=&icon-external&&&/i&&/a&——在线学习社区,可关注感兴趣的话题&br&&a href=&//link.zhihu.com/?target=https%3A//careercup.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Careercup&i class=&icon-external&&&/i&&/a&——含编程题、面试建议、招聘信息等&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Github&i class=&icon-external&&&/i&&/a&——可以审查代码、管理项目,与数百万用户一起开发软件。(含开源代码)&br&&a href=&//link.zhihu.com/?target=https%3A//www.reddit.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reddit&i class=&icon-external&&&/i&&/a&——热门社区,用户很多,提问能得到很多留言回复&br&&/p&&p&&b&5、新闻类:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.thenextweb.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Thenextweb&i class=&icon-external&&&/i&&/a&——可获取各种技术相关的新闻&br&&a href=&//link.zhihu.com/?target=http%3A//www.ycombinator.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Y Combinator&i class=&icon-external&&&/i&&/a&——可以订阅邮件,会将最新消息(新闻)直接发送至你的邮箱&br&&a href=&//link.zhihu.com/?target=https%3A//arstechnica.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ars Technica&i class=&icon-external&&&/i&&/a&——此网站发表的文章角度独特并且内容质量很高&br&&a href=&//link.zhihu.com/?target=http%3A//acm.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&acm.org&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&——新闻交流社区&br&&a href=&//link.zhihu.com/?target=https%3A//lobste.rs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lobsters&i class=&icon-external&&&/i&&/a&——近期热点新闻&br&&a href=&//link.zhihu.com/?target=https%3A//techcrunch.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TechCrunch&i class=&icon-external&&&/i&&/a&——获取技术类新闻的另一个好的网站&br&&a href=&//link.zhihu.com/?target=http%3A//www.gsmarena.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GSMArena&i class=&icon-external&&&/i&&/a&——可获取最新的关于手机、android的新闻&br&&br&&b&6、面试相关:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LintCode &i class=&icon-external&&&/i&&/a&——在线刷题网站,有ladder、note、代码风格检测等功能,分门别类、由简单到难&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.jiuzhang.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&九章算法&i class=&icon-external&&&/i&&/a&——提供最专业的程序员面试指导&br&&a href=&//link.zhihu.com/?target=https%3A//www.interviewbit.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Interview Bit&i class=&icon-external&&&/i&&/a&——可以根据你的兴趣和能力匹配出相应的IT公司,并建立联系,帮助你做好所需准备,得到你想要的工作。&br&&a href=&//link.zhihu.com/?target=http%3A//www.geeksforgeeks.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Geeksforgeeks&i class=&icon-external&&&/i&&/a&——提供很多问题的优质解答&br&&a href=&//link.zhihu.com/?target=https%3A//techinterview.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tech Interview&i class=&icon-external&&&/i&&/a&——包含很多让你用脑思考的东西(面试题、测试题、难度题)&br&&a href=&//link.zhihu.com/?target=https%3A//www.reddit.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reddit&i class=&icon-external&&&/i&&/a&——包含有趣的编程挑战题和技术面试指南&br&&a href=&//link.zhihu.com/?target=http%3A//kelukelu.me/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KeLuKeLu&i class=&icon-external&&&/i&&/a&——包含面试准备、面试题、面试技巧等内容&br&&a href=&//link.zhihu.com/?target=https%3A//www.palantir.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Palantir&i class=&icon-external&&&/i&&/a&——教你如何应对算法面试,提高通过率&br&&a href=&//link.zhihu.com/?target=https%3A//visualgo.net/en& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visualgo&i class=&icon-external&&&/i&&/a&——通过动画演示数据结构、算法等知识&br&&a href=&//link.zhihu.com/?target=https%3A//www.kchodorow.com/blog/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Snail in a Turtleneck&i class=&icon-external&&&/i&&/a&——技术面试指南&br&&a href=&//link.zhihu.com/?target=https%3A//lifehacker.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lifehacker&i class=&icon-external&&&/i&&/a&——有关求职面试的新闻、视频、八卦&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//leetcode.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LeetCode&i class=&icon-external&&&/i&&/a&——在线刷题网站,在线编程刷题、在线判题&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.thebalance.com/job-interview-questions-and-answers-2061204& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The balance&i class=&icon-external&&&/i&&/a&——各种面试时会问到的问题及其回答技巧&br&&a href=&//link.zhihu.com/?target=http%3A//www.cmi.ac.in/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Chennai Mathematical Institute&i class=&icon-external&&&/i&&/a&——包含很多编程相关的概念问题&br&&br&&b&7、开发者博客:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//blog.codinghorror.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coding Horror&i class=&icon-external&&&/i&&/a&——优秀程序员的博客(分享自己的经历)&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//blog.cleancoder.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Clean Coder Blog&i class=&icon-external&&&/i&&/a&——《Clean code》作者的博客&br&&a href=&//link.zhihu.com/?target=https%3A//www.joelonsoftware.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Joel on Software&i class=&icon-external&&&/i&&/a&——博主写了上千篇关于软件开发、管理、互联网相关的文章&br&&a href=&//link.zhihu.com/?target=http%3A//prog21.dadgum.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming in the 21st Century&i class=&icon-external&&&/i&&/a&——博主的几百篇文章谈论编程、设计灵感、代码创造性等问题&br&&a href=&//link.zhihu.com/?target=http%3A//www.yegor256.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Blog About Computers&i class=&icon-external&&&/i&&/a&——一位编程开发者的博客&br&&a href=&//link.zhihu.com/?target=https%3A//stephenhaunts.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stephen Haunts { Coding in the Trenches }&i class=&icon-external&&&/i&&/a&——一位有经验的软件开发者写的关于软件开发、企业构架、领导管理等内容的博客&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.daedtech.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stories about Software&i class=&icon-external&&&/i&&/a&——有很多关于“软件”的故事&br&&a href=&//link.zhihu.com/?target=http%3A//coding-geek.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coding Geek - A blog about IT, programming and Java&i class=&icon-external&&&/i&&/a&——编程技术怪才的博客(包含很多java相关的东西)&br&&a href=&//link.zhihu.com/?target=http%3A//code.antonio081014.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://code.antonio081014.com&i class=&icon-external&&&/i&&/a&——有关ACM竞赛题及其参考代码&br&&br&&b&8、机器学习相关:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//mark.reid.name/blog/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mark Reid&i class=&icon-external&&&/i&&/a&——一位研究机器学习多年的博主,从2007年至今,写了无数篇帖子,机器学习入门者可以从他最热门的帖子开始学习。&br&&a href=&//link.zhihu.com/?target=https%3A//nlpers.blogspot.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hal&i class=&icon-external&&&/i&&/a&——博主对机器学习、计算机语言等有一定研究&br&&a href=&//link.zhihu.com/?target=https%3A//aicoder.blogspot.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neal Richter&i class=&icon-external&&&/i&&/a&——博主在博客中“浅谈人工智能、机器学习、搜索引擎……”&br&&a href=&//link.zhihu.com/?target=http%3A//www.earningmyturns.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fernando Pereira&i class=&icon-external&&&/i&&/a&——大牛级人物的博客,对机器学习、计算机语言学等领域有深入研究,但是博客很多年没有更新&br&&a href=&//link.zhihu.com/?target=https%3A//yyue.blogspot.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yisong Yue&i class=&icon-external&&&/i&&/a&——博主是加州理工学院机器学习研究员,发表与机器学习有关的理论和实践的帖子&br&&a href=&//link.zhihu.com/?target=http%3A//blog.mikiobraun.de/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Marginally Interesting&i class=&icon-external&&&/i&&/a&——发表了有关机器学习、计算机科学等的帖子&br&&br&&b&9、有趣的视频 or 网站:&/b& &/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.theverge.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Verge&i class=&icon-external&&&/i&&/a&——包含各种有趣的应用程序、技术文化等&br&&a href=&//link.zhihu.com/?target=http%3A//www.alleywatch.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlleyWatch&i class=&icon-external&&&/i&&/a&——包含新闻、评论、产品、投资信息&br&&a href=&//link.zhihu.com/?target=https%3A//www.wired.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WIRED&i class=&icon-external&&&/i&&/a&——此网站的创新思维开创了新的产业&br&&br&&b&10、提升英语水平:&/b& &/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.quia.com/shared/english/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Quia - English&i class=&icon-external&&&/i&&/a&——在线英语题测试&br&&a href=&//link.zhihu.com/?target=http%3A//grammarbook.com/english_rules.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GrammarBook&i class=&icon-external&&&/i&&/a&——英语用法规则的文章&视频&br&&a href=&//link.zhihu.com/?target=http%3A//grammar.ccc.commnet.edu/grammar/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Guide to Grammar and Writing&i class=&icon-external&&&/i&&/a&——提供专业老师写的语法指南、写作指南&br&&a href=&//link.zhihu.com/?target=https%3A//owl.english.purdue.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&the Purdue University Online Writing Lab (OWL)&i class=&icon-external&&&/i&&/a&——学习英语的建议&br&&a href=&//link.zhihu.com/?target=https%3A//www.englishclub.com/learn-english.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn English | EnglishClub&i class=&icon-external&&&/i&&/a&——英语游戏、语法课程、使用技巧等&br&&br&&b&11、电脑相关书籍:&/b& &/p&&p&&a href=&//link.zhihu.com/?target=http%3A//it-ebooks.info/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IT eBooks&i class=&icon-external&&&/i&&/a&——大型电子图书馆,可即时免费下载书籍&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/EbookFoundation/free-programming-books& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EbookFoundation/free-programming-books&i class=&icon-external&&&/i&&/a&——包含计算机相关的所有知识的书籍(多种语言),可下载&br&&a href=&//link.zhihu.com/?target=http%3A//sciencebooksonline.info/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Science Books Online&i class=&icon-external&&&/i&&/a&——大约150本计算机相关免费书籍&br&&a href=&//link.zhihu.com/?target=http%3A//gatecse.in/best-books-for-gatecse/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Best Books for GATE CSE&i class=&icon-external&&&/i&&/a&——包含很多计算机相关书籍,可以免费下载&/p&&p&&br&&/p&&p&&b&12、看牛人写代码:&/b& &/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.liveedu.tv/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LiveEdu.tv&i class=&icon-external&&&/i&&/a&——可以观看牛人编写网站、游戏等应用程序的代码录像&/p&&p&&br&&/p&&p&=那么要如何学习编程呢?可以&b&分为以下三步&/b&:&/p&&ul&&li&疯狂的积累代码量,疯狂的刷题,疯狂的积攒你的自信心。&/li&&li&寻找实习,找到自己感兴趣的地方,跟着别人做,了解工业届到底在使用什么技术。&/li&&li&当你实习结束的时候,你将不会再对那些名词感到陌生,你有了一定的经验,你可以尝试独立的尝试用一些开源框架做一些简单的project。&/li&&/ul&&p&&b&具体该如何做呢?&/b&&/p&&ul&&li&当你还是一个&b&新手&/b&的时候,你需要&b&&i&疯狂的积累你的代码量&/i&&/b&,你可以从基本的问题出发,做一些简单的问题,怎么输入数据,怎么输出数据,然后熟悉各种数据结构,各种常见算法,疯狂的刷题,比如&u&&a href=&//link.zhihu.com/?target=http%3A//www.lintcode.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/u& 就是一个很不错的刷题网站,不会怎么办!看答案,了解怎么写,然后自己实现一遍。你可以先从easy难度的问题做起,每一个程序也就20-40行左右,甚至你可以一旦AC,反复提交,以增强自信心,虽然这只是一个玩笑,但是它可以让你提高你对编程的自信,对编程的喜爱,当你有自信的时候,你才能真正的把一件事情做好。当你反复解决一个又一个的问题的时候,你要告诉自己我是个天生的编程者!然后你就可以挑战更高难度的问题,当你积累到10W以上的代码量的时候,你会发现你会有一个质变。一切将变的顺手。当以前要想半天的语句,现在信手拈来。恭喜你跨出了很重要的一步。&/li&&li&&b&找实习&/b&。当你有了第一步作为铺垫以后,你应该&b&&i&去业界提高你的编程能力&/i&&/b&,这个很重要。什么是编程能力,用程序去解决真正的问题,你的程序写的更让人能读懂,这是编程能力,你的程序高效可维护,这是编程能力,你的程序被review的次数很少,质量很高,这是编程能力,你能快速理解一个小项目,小模块在做什么,怎么做的,这也是编程能力。所以你应该去公司,有mentor指导你的情况下,去做一些事情,参与到团队中去。同时实习生的面试门槛比Full time会低很多,只要你把第一步做好了,好好的准备面试,拿到一个不错的实习也问题不大(实习生也更容易拿到return off)。&/li&&li&当你&b&实习结束&/b&以后,&b&&i&做一下总结&/i&&/b&,业界到底在干什么,业界使用的技术到底有哪些,他们平时的编程工具等等这些都是值得你学习的地方,你可以用你学到东西尝试着去做一些简单的project。你会发现原来毫无头绪的事情,慢慢变得清晰起来。疯狂的训练,超强的自信心,去工业界实习一下,你就会明白我要什么,我要为了我所想要的我该怎么做。&/li&&/ul&&p&如果大家对于编程学习存在困惑,不知道如何学习算法和数据结构,欢迎大家才参加我的知乎live:&/p&&h2&&b&知乎 Live 预告 - 如何学好算法与数据结构&/b&&/h2&&p&&b&Live 主讲人&/b&&/p&&p&Mark Chen,Google 软件工程师一枚,斩获 offer 包括 Baidu, 网易, Hulu, Google, Microsoft, 小米等。曾参加国家信息学竞赛,及大学生程序设计竞赛,因竞赛成绩优异保送北京大学。&/p&&p&&b&Live 主题:如何学习算法和数据结构&/b&&/p&&ul&&li&有哪些需要学习的算法与数据结构&/li&&li&如何学好算法与数据结构 - 刷题的重要性&/li&&li&算法与数据结构在工作中的应用&/li&&li&总结 - 有哪些经典的解题模板&/li&&/ul&&p&此次 Live 将在北京时间1月31日周三晚上8点举行,报名请戳:&/p&&a href=&https://www.zhihu.com/lives/004480& class=&internal&&如何学好算法与数据结构&/a&&p&&b&欢迎关注我的微信公众号:九章算法(ninechapter),帮助你了解IT技术前沿,通过面试、拿到offer、找到好工作!&/b&&/p&
首先献上一些好的编程网站:1、在线编程练习:——在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考 (——lintcode 参考答案网站,提供最优解)——包含在线…
&p&那就来讲讲算法与数据结构中的位运算吧!&/p&&figure&&img src=&https://pic4.zhimg.com/v2-57b1b55649aaa_b.jpg& data-size=&normal& data-rawwidth=&303& data-rawheight=&300& class=&content_image& width=&303&&&figcaption&位运算&/figcaption&&/figure&&h2&&b&&i&一.&/i&运算基本操作知识小结&/b&&/h2&&p&&b&&i&1.&/i&左移操作 a && b&/b&将A的二进制表示的每一位向左移B位,左边超出的位截掉,右边不足的位补0&/p&&p&A = 1100
B = 2 A && B = 110000&/p&&p&&b&&i&2.&/i&右移操作 A && B , A &&& B&/b&右移操作分为算数右移和逻辑右移&/p&&blockquote&算术右移是带符号的右移,逻辑右移是不带符号的右移。&br&算术右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左边不足的位补符号位的数。 &br&逻辑右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左边不足的位补0。&br&C语言:只有逻辑右移 A && B&br&JAVA 和 Python中:算术右移 A && B , 逻辑右移 A &&& B&/blockquote&&div class=&highlight&&&pre&&code class=&language-text&&A =
&/code&&/pre&&/div&&p&&b&&i&3.&/i&按位与操作 a & b&/b&将A和B的二进制表示的每一位进行与操作,只有两个对应的二进制位都为1时,结果位才为1,否则为0.&/p&&div class=&highlight&&&pre&&code class=&language-text&&A = 001010
B = 101100
A & B = 001000
&/code&&/pre&&/div&&p&&b&&i&4.&/i&按位或操作 a | b&/b&将A和B的二进制表示的每一位进行或操作,只要两个对应的二进制位有一个为1,结果位就为1,否则为0.&/p&&div class=&highlight&&&pre&&code class=&language-text&&A = 001010
B = 101100
A | B = 101110
&/code&&/pre&&/div&&p&&b&&i&5&/i&按位非操作 ~ a&/b&将A的二进制表示每一位进行取反操作,如果对应的二进制位为0,结果位为1,否则为0.&/p&&div class=&highlight&&&pre&&code class=&language-text&& A =
&/code&&/pre&&/div&&p&&b&&i&6.&/i&按位异或操作 a ^ b&/b&将A和B的二进制表示的每一位进行异或操作,如果对应的二进制位不同,结果位为1,否则为0.&/p&&div class=&highlight&&&pre&&code class=&language-text&&A = 001010 B = 101100 A ^ B = 100110
&/code&&/pre&&/div&&p&&br&&/p&&h2&1/&b&.应用实练习&/b&&/h2&&p&&b&&i&1.&/i&应用一给出两个32位的整数N和M,以及两个二进制位的位置i和j。写一个方法来使得N中的第i到j位等于M(M会是N中从第i为开始到第j位的子串)。&/b&&/p&&p&&u&&a href=&//link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/update-bits/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/update-bits/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/u&&/p&&blockquote&&b&思路解析:&/b&&/blockquote&&p&根据题意,可以有一个想法,将n中第i位到第j位的先置为0,然后,按位或m && i即可。 &/p&&p&现在问题是如何将n中第i位到第j位置为0,可以考虑构造一个数,这个数从第i位到第j位是0,其他位都为1。&/p&&p&这样的数并不是很好构造,所以,我们构造一个数从第i位到第j位都是1,其他位为0的数,然后将这个数取反,就可以得到从第i位到第j位是0,其他位是1的数。&/p&&p&-1的二进制表示是所有位为1,我们以这个数为起点。需要的做的是将高(31-j)位置0,将低i位置0。&/p&&p&将-1先左移(31-j)位,因为高(31-j)位都是不需要的。&/p&&p&然后再将((-1) && (31 -
j))逻辑右移(31 - j + i)位,因为要将低i位置0.&/p&&p&然后再将(((-1) &&(31 - j)) &&& (31 - j + i))左移i位,将1恢复到正确的位置即可。即得到第i位到第j位是1,其他位是0的数。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2421f64ccd71e88e92e26ed85d5e99c4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&190& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-2421f64ccd71e88e92e26ed85d5e99c4_r.jpg&&&/figure&&p&&br&&/p&&p&&b&&i&2&/i&应用二给出两个整数a和b, 求他们的和, 但不能使用 &code&+&/code& 等数学运算符。&/b&&u&&a href=&//link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/a-b-problem/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/a-b-problem/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/u&&/p&&blockquote&&b&思路解析:&/b&&/blockquote&&p&这里引用九章答案的答案 &/p&&p&&u&&a href=&//link.zhihu.com/?target=http%3A//www.jiuzhang.com/solutions/a-b-problem/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&}

我要回帖

更多关于 光芒jsq24 cs 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信