Unity程序员开发文档怎么写在包图网开个什么VIP就好

Ctrl+D收藏包图网全站素材可商用当前位置:包图>&>&
蓝色格调程序员简历word简历模板蓝色格调程序员简历word简历模板包图网设计作品均可商用,请放心下载包图网独享该作品版权
下载:55图片编号296681颜色模式RGB图片尺寸像素
文件大小0.21M上传时间肖像权人物画像及字体仅供参考 相关字体和人物肖像需版权方额外授权,请谨慎使用
文件格式:DOCX
推荐软件:WPS 2016分享:声明:模板内容仅供参考,包图网是正版商业图库,所有原创作品(含预览图)均受著作权法保护。著作权及相关权利归本网站所有,未经许可任何人不得擅自使用,否则将依法要求承担高达人民币50万元的赔偿责任侵权投诉VIP会员专享包图网VIP全站资源免费下载该作品已被下架,再找找别的吧!举报作品该作品违反相关法律规范侵权/盗版问题请详细描述并提供原作品链接其他原因请详细描述举报原因你的反馈将是我们进步的动力提交成功感谢您为建设一个更好的包图做出的努力相似推荐包图网登录后立即下载原创商用设计作品手机登录包图网你将成为包图网第 12,984,123名注册用户
"同意"已有账号? 手机号注册包图网使用手机号登录亲,您的手机号码不对哟换一张亲,验证错误,请再试一下哟亲,请输入正确的验证码哟使用QQ/微信登录包图网选择绑定账号亲,为了您的账号安全,您的手机号只能绑定一个包图账号。请选择绑定:使用QQ/微信登录全站精品免费下载
正版版权海量素材优质服务包图网-Copyright (C) 2018 包图网
微信公众号
包图网VIP会员服务协议欢迎使用包图网VIP会员服务,为了保障您的权益,请在进行下一步操作前,详细阅读本协议的所有内容,特别是加粗部分。当您 勾选”同意《包图网VIP会员服务协议“或“立即开通”按钮或其他具有类似含义的按钮时,您的行为表示您同意并签署了本协议,并同意遵守本协议中的约定。该协议构成您与包图网达成的协议,具有法律效力。本协议是《包图网网络服务使用协议》的补充协议,是其不可分割的组成部分,与其构成统一整体。本协议与上述内容存在冲突的,以本协 议为准。本协议内容包括协议正文、包图网已经发布的或将来可能发布的与包图网VIP会员服务相关的各类规则。所有规则为本协议不可分割的组成部分,与协议正文具有同等法律效力。一旦相关内容发生变动,包图网将会通过电子邮件或网站公告等方式提示您。如果您不同意对本协议内容所做的修改,则应立即停止使用本服务;如果您继续使用本服务的,则视为您同意对本协议内容所做的修改。一. 定义1.包图网VIP会员:指注册用户在签署本协议并根据包图网公布的收费标准支付相应的费用后获取的特殊资格,具体资格名称以包图网公示的名称为准。以下简称“会员”。2.会员服务:指会员所享有根据选择购买的会员选项所享有的特殊服务,具体以包图网公布的服务内容为准。二. 使用规范1.您申请开通会员服务时,需要提交您本人的手机号码、邮箱及第三方支付账户等个人资料或企业身份证明资料,并保证您提供的个人资料真实、准确、完整、合法有效,如有变动,您应及时更新。如您提供的资料不合法、不真实、不准确、不详尽,由此引起的损失及法律责任将由您自行承担,给包图网造成损失的,包图网保留要求您赔偿的权利。2.包图网有权单方对其提供的虚拟产品(包括但不限于VIP会员)予以定价,并有权根据自身运营需要予以变更,且包图网在此获得您的授权可以根据平台统一调整比例调整您已经获取的虚拟产品;
基于虚拟产品的性质和特征,您所获取的虚拟产品不能够进行退货、换货、兑换现金亦不得用于商业领域如买卖、置换、抵押等。一切通过非官方公布渠道取得的虚拟产品及其衍生服务均不获保护,包图网有权中止或中止对您的服务。3.会员服务有效期根据您选择购买的会员选项的具体时长为准,自您成功支付会员服务费用之日起计算。每一个收费项目的服务周期以页面标注期限为准。如您未在有效时间内使用已购买的服务,视为您已使用,包图网概不退款。若您希望在有效期届满后继续享受会员服务,则需要重新购买。4.若您购买了多个收费服务,其服务范围相同且有效期发生重合的情况下,高等级套餐会自动覆盖低等级套餐,同时您已支付的低等级套餐费用包图网概不退款。例如您在5月1日购买广告设计39元套餐(1年可下载10个/天),5月7日购买广告设计99元套餐(一年内海量下载),99元套餐将自动覆盖39元套餐。5. 在使用会员服务过程中,您应当是具备完全民事权利能力和完全民事行为能力的自然人、法人或其他组织。若您不具备前述主体资格,则您及您的监护人应承担因此而导致的一切后果,包图网有权向您的监护人追偿。6.您知悉并同意,包图网有权通过邮件、短信或电话等形式, 向您发送会员活动相关信息。7.您确认会员服务仅限您本人使用,同时,您保证,您将合理使用会员服务,不利用会员服务非法获利,不以任何形式转让您所享有的会员服务,不以任何形式将您所享有的会员服务借给他人使用,如包图网有合理理由怀疑您存在不当使用会员服务时,包图网有权取消您的会员资格且不退还您支付的会员服务费用,因此产生的相关责任及损失均由您自行承担,给包图网造成损失的,包图网保留向您追偿的权利。8.包图网保留在法律法规允许的范围内自行决定是否接受您的会员申请、调整会员服务内容、取消会员资格等相关权利。
9.您理解并保证,您在使用会员服务过程中遵守诚实信用原则。如包图网发现或有合理理甶怀疑您存在以下任一情形的:
(a) 通过任何不当手段或以违反诚实信用原则的方式开通会员服务的,包括但不限于通过恶意软件绕过包图网设定的正常流程开通会员服务;(b) 您提供的资料不合法、不真实,包括但不限于盗用他人信息;(c) 您通过包图网会员专区购买的商品用于法律法规所禁止的目的的;(d) 包图网有合理理由怀疑您存在违反诚实信用原则的其他行为。 则,包图网有权拒绝您的会员服务开通需求;若已开通的,包图网有权单方面取消您的会员资格且不退还您支付的会员服务费用。三. 账号独立1.同一主体拥有的QQ帐号及微信帐号,在进行包图网VIP登录时,将被识别为两个独立的帐号;2.同一主体拥有多个QQ帐号并进行包图网VIP会员登录的,每一个QQ帐号将被识别为一个独立的帐号;3.同一主体拥有多个微信帐号并进行包图网VIP会员登录的,每一个微信帐号将被识别为一个独立的帐号;4.每个帐号之间的充值记录、VIP权限无法进行转移、迁徙、转让、赠与、售卖、租借、分享,无论该等帐号是否由同一使用人拥有,请您在登录/充值/参加活动时注意区分,避免造成损失。由此造成的损失由VIP会员自行承担。四. 会员服务售后1.您知悉并确认,开通会员服务后,若您中途主动取消服务或终止资格或被包图网根据《包图网网络服务使用协议》、本协议及相关规则注销账号、终止会员资格的,您已支付的会员服务费用将不予退还。2.如您有其他与会员服务售后相关的问题,可以通过包图网公布的联系方式联系客服进行反馈。五. 其他约定1.通知:所有发给您的通知都可通过电子邮件、常规的信件或在网站显著位置公告的方式进行传送。2.本协议适用中华人民共和国的法律。当本协议的任何内容与中华人民共和国法律相抵触时,应当以法律规定为准,同时相关条款将按法律规定进行修改或重新解释,而本协议其他部分的法律效力不变。3.如使用会员服务过程中出现纠纷,您与包图网应友好协商解决,若协商不成,应约定相关诉讼由上海市浦东新区人民法院管辖。收藏成功!Ctrl+D收藏包图网全站素材可商用所有:格式:您是不是想找:排序方式:程序员敲击键盘的音效程序员敲击键盘的音效 1
包图网为您找到443个原创可商用程序素材,内容包括程序图片素材、程序设计素材、程序模板,程序图片下载等,程序模板下载、程序素材设计 ,下载PSD,PNG,CDR,AI格式程序设计模板就到【包图网】1.没找到我想要的内容2.找到的作品素材质量不高3.搜索不准确其他问题:您的联系方式:提交提交成功提交成功作品登记证书登记号:以上事项,由上海包图网络科技有限公司申请,经上海市版权局审核,根据《作品自愿登记试行办法》规定,予以登记。中华人民共和国国家版权局统一监制包图网登录后立即下载原创商用设计作品手机登录包图网你将成为包图网第 12,984,123名注册用户
"同意"已有账号? 手机号注册包图网使用手机号登录亲,您的手机号码不对哟换一张亲,验证错误,请再试一下哟亲,请输入正确的验证码哟使用QQ/微信登录包图网选择绑定账号亲,为了您的账号安全,您的手机号只能绑定一个包图账号。请选择绑定:使用QQ/微信登录全站精品免费下载
正版版权海量素材优质服务包图网-Copyright (C) 2018 包图网
微信公众号
包图网VIP会员服务协议欢迎使用包图网VIP会员服务,为了保障您的权益,请在进行下一步操作前,详细阅读本协议的所有内容,特别是加粗部分。当您 勾选”同意《包图网VIP会员服务协议“或“立即开通”按钮或其他具有类似含义的按钮时,您的行为表示您同意并签署了本协议,并同意遵守本协议中的约定。该协议构成您与包图网达成的协议,具有法律效力。本协议是《包图网网络服务使用协议》的补充协议,是其不可分割的组成部分,与其构成统一整体。本协议与上述内容存在冲突的,以本协 议为准。本协议内容包括协议正文、包图网已经发布的或将来可能发布的与包图网VIP会员服务相关的各类规则。所有规则为本协议不可分割的组成部分,与协议正文具有同等法律效力。一旦相关内容发生变动,包图网将会通过电子邮件或网站公告等方式提示您。如果您不同意对本协议内容所做的修改,则应立即停止使用本服务;如果您继续使用本服务的,则视为您同意对本协议内容所做的修改。一. 定义1.包图网VIP会员:指注册用户在签署本协议并根据包图网公布的收费标准支付相应的费用后获取的特殊资格,具体资格名称以包图网公示的名称为准。以下简称“会员”。2.会员服务:指会员所享有根据选择购买的会员选项所享有的特殊服务,具体以包图网公布的服务内容为准。二. 使用规范1.您申请开通会员服务时,需要提交您本人的手机号码、邮箱及第三方支付账户等个人资料或企业身份证明资料,并保证您提供的个人资料真实、准确、完整、合法有效,如有变动,您应及时更新。如您提供的资料不合法、不真实、不准确、不详尽,由此引起的损失及法律责任将由您自行承担,给包图网造成损失的,包图网保留要求您赔偿的权利。2.包图网有权单方对其提供的虚拟产品(包括但不限于VIP会员)予以定价,并有权根据自身运营需要予以变更,且包图网在此获得您的授权可以根据平台统一调整比例调整您已经获取的虚拟产品;
基于虚拟产品的性质和特征,您所获取的虚拟产品不能够进行退货、换货、兑换现金亦不得用于商业领域如买卖、置换、抵押等。一切通过非官方公布渠道取得的虚拟产品及其衍生服务均不获保护,包图网有权中止或中止对您的服务。3.会员服务有效期根据您选择购买的会员选项的具体时长为准,自您成功支付会员服务费用之日起计算。每一个收费项目的服务周期以页面标注期限为准。如您未在有效时间内使用已购买的服务,视为您已使用,包图网概不退款。若您希望在有效期届满后继续享受会员服务,则需要重新购买。4.若您购买了多个收费服务,其服务范围相同且有效期发生重合的情况下,高等级套餐会自动覆盖低等级套餐,同时您已支付的低等级套餐费用包图网概不退款。例如您在5月1日购买广告设计39元套餐(1年可下载10个/天),5月7日购买广告设计99元套餐(一年内海量下载),99元套餐将自动覆盖39元套餐。5. 在使用会员服务过程中,您应当是具备完全民事权利能力和完全民事行为能力的自然人、法人或其他组织。若您不具备前述主体资格,则您及您的监护人应承担因此而导致的一切后果,包图网有权向您的监护人追偿。6.您知悉并同意,包图网有权通过邮件、短信或电话等形式, 向您发送会员活动相关信息。7.您确认会员服务仅限您本人使用,同时,您保证,您将合理使用会员服务,不利用会员服务非法获利,不以任何形式转让您所享有的会员服务,不以任何形式将您所享有的会员服务借给他人使用,如包图网有合理理由怀疑您存在不当使用会员服务时,包图网有权取消您的会员资格且不退还您支付的会员服务费用,因此产生的相关责任及损失均由您自行承担,给包图网造成损失的,包图网保留向您追偿的权利。8.包图网保留在法律法规允许的范围内自行决定是否接受您的会员申请、调整会员服务内容、取消会员资格等相关权利。
9.您理解并保证,您在使用会员服务过程中遵守诚实信用原则。如包图网发现或有合理理甶怀疑您存在以下任一情形的:
(a) 通过任何不当手段或以违反诚实信用原则的方式开通会员服务的,包括但不限于通过恶意软件绕过包图网设定的正常流程开通会员服务;(b) 您提供的资料不合法、不真实,包括但不限于盗用他人信息;(c) 您通过包图网会员专区购买的商品用于法律法规所禁止的目的的;(d) 包图网有合理理由怀疑您存在违反诚实信用原则的其他行为。 则,包图网有权拒绝您的会员服务开通需求;若已开通的,包图网有权单方面取消您的会员资格且不退还您支付的会员服务费用。三. 账号独立1.同一主体拥有的QQ帐号及微信帐号,在进行包图网VIP登录时,将被识别为两个独立的帐号;2.同一主体拥有多个QQ帐号并进行包图网VIP会员登录的,每一个QQ帐号将被识别为一个独立的帐号;3.同一主体拥有多个微信帐号并进行包图网VIP会员登录的,每一个微信帐号将被识别为一个独立的帐号;4.每个帐号之间的充值记录、VIP权限无法进行转移、迁徙、转让、赠与、售卖、租借、分享,无论该等帐号是否由同一使用人拥有,请您在登录/充值/参加活动时注意区分,避免造成损失。由此造成的损失由VIP会员自行承担。四. 会员服务售后1.您知悉并确认,开通会员服务后,若您中途主动取消服务或终止资格或被包图网根据《包图网网络服务使用协议》、本协议及相关规则注销账号、终止会员资格的,您已支付的会员服务费用将不予退还。2.如您有其他与会员服务售后相关的问题,可以通过包图网公布的联系方式联系客服进行反馈。五. 其他约定1.通知:所有发给您的通知都可通过电子邮件、常规的信件或在网站显著位置公告的方式进行传送。2.本协议适用中华人民共和国的法律。当本协议的任何内容与中华人民共和国法律相抵触时,应当以法律规定为准,同时相关条款将按法律规定进行修改或重新解释,而本协议其他部分的法律效力不变。3.如使用会员服务过程中出现纠纷,您与包图网应友好协商解决,若协商不成,应约定相关诉讼由上海市浦东新区人民法院管辖。收藏成功!
测试环境0.0245s全站20000+视频教程,无限学习全站素材源文件,无限下载限时超低价,低至1.1元/天系统消息评论回复课程提醒发布时间:日 11:53在《PS-鲜虾直达 创意广告》回复您谢谢啦!上传了扫码下载虎课APP您还没有专辑开始创建自己的专辑吧创建我知道了PS-手绘插画周年庆海报扫一扫下载虎课app支持离线缓存,随时随地学习VIP优惠升级
18大分类,畅享18,000+设计教程特权!×即将跳转下一节宽屏取消宽屏学设计上虎课网学习意犹未尽?,继续提升免费学习即将结束关闭发表评论收起宽屏收藏已收藏
添加到专辑扫一扫下载虎课app支持离线缓存,随时随地学习评论(可获得虎课币) 使用软件:
PS(CC2017)
难度等级: 中级 视频时长: 49分28秒 浏览人数:
12,025 学习人数:
4,004 上传时间:
04:04:00工具和快捷键:PS-形状工具图层编组(Ctrl+G)复制图层(Ctrl+J)1?[打开]PS软件,[新建]任意大小的画布。具体效果如图示。2?[拖入]准备好的背景素材,调整大小排列至版面合适的位置。具体效果如图示。3?使用[文字工具],选择合适的字体,输入文字,调整大小 ,排列至画面合适的位置。具体效果如图示。4?[选择]文字图层,右击[转换为形状对象]。使用[钢笔工具],根据设计思路,在合适的合适位置[添加]锚点,调整锚点位置和线条弧度。具体效果如图示。5、[新建]图层,使用[钢笔工具]绘制形状对象,[填充]橙色,按Alt键单击[创建剪切蒙版]。具体效果如图示。查看更多您需要学习后才可以评价,为课程评分:
请选择课程评分难易度程度:
太简单简单适中有点难太难了请选择课程难易程度(+5虎课币)0%求解答勾选后,虎课助教会根据您的问题进行解答!(+10虎课币)0/200您需要学习后才可以评价,为课程评分:
请选择课程评分难易度程度:
太简单简单适中有点难太难了请选择课程难易程度(+5虎课币)0%求解答勾选后,虎课助教会根据您的问题进行解答!(+10虎课币)0/200仅显示带图评论排序方式:虎课币消耗提问需要消耗您 30虎课币是否确认提问?再看看确认提问提交成功!
若答案被采纳,将获取30虎课币
同学,小虎知道你非常努力的想学习!老师录制课程真的也很辛苦确定学习吗?您每天可免费学习一个教程。成为VIP可无限学习 !成为VIP吧!您已经免费学习 1 个教程 !我们录制教程很努力的,赞助下吧 !升级VIP吧!您已经学习 5 个教程啦!我们录制教程很努力的,赞助升级下吧 !您已经累计下载5个源文件您在当前分类下不是VIP,赞助VIP享受无限下载您已经累计下载5个素材文件您在当前分类下不是VIP,赞助VIP享受无限下载您已经累计下载5个源文件您在当前分类下不是VIP,赞助VIP享受无限下载您已经累计观看5个图文教程您在当前分类下不是VIP,赞助VIP享受无限观看学习后才能评价哦!学习后才能提问哦!本次课程评分:课程难易程度:您近期已提交过同样评论请勿频繁提交重复评论~
0/200确认要删除这条评论吗?删除后将无法恢复。取消确认获得30虎课币评论提交成功,将在审核通过后显示当日最多删除五条评论成为全站通VIP吧!尊享系列好课,精品课程全到手!×下载素材/源文件:收藏成功取消成功><友情链接:
客服热线:021-<
扫一扫下载虎课app支持离线缓存,随时随地学习工作时间:电话客服:021-工作日:9:30 - 18:30&在线客服工作日:9:00 - 22:00节假日:9:00 - 18:00客服QQ使用手机号码登录使用手机号码登录手机号码格式错误图形验证码错误,请重新输入验证码错误,请重新输入登录使用手机号码注册同意 使用手机号码注册手机号码格式错误图形验证码错误,请重新输入验证码错误,请重新输入注册同意 已连续签到0天第一天5个虎课币第二天10个虎课币第三天15个虎课币第四天20个虎课币第五天40个虎课币第六天20个虎课币第七天20个虎课币已签到每周一重置签到奖励已连续签到0天本周斩获110个虎课币,下周也要来哦我知道了已连续签到0天哎呀,签到失败了!再次签到哎呀,系统出现错误,请稍后重试!&p&我理解的本科应届生水平&/p&&p&合格: 能有一门熟悉的编程语言,具备完整的计算机基础知识体系(如操作系统,计算机体系结构等),能在指导下完成项目的功能的正确实现&/p&&p&优秀: 能有几门熟悉擅长的编程语言(如C++, Python等),具备完整的计算机知识体系观,具有融汇贯通的能力,如能把操作系统,计算机体系结构等课程知识串联起来。能在指导下完成项目的功能的正确实现,并且能进行一定程度的优化,使其运行更加的高效。&/p&&p&&br&&/p&&p&牛X: 能有几门熟悉擅长的编程语言,并能追寻背后的实现与原理,如C++的内存对象模型,STL的实现及其原因(如vector自动增长因子的设置理由),编译器如何去实现的等。具有完整的知识体系观,不仅能在理论上融汇贯通在一起,还能有实际动手能力。如修改开源指令集RISC-V,能知道修改LLVM编译器来支持实现修改后的RISC-V指令,并能延伸拓展使用QEMU编译运行新的修改后的RISC-V指令集的Linux操作系统。其也能在指导下完成项目的正确实现,并能进行优化,使其运行更高效。与此同时,包括但不限于会更加思考代码的维护性,扩展性,可衡量性(如单元测试)等问题,并能在项目本身提出后续的改进与演进的方向。&/p&&p&&br&&/p&&p&神级: 无止尽的天才光芒迸发与成就,不属于我来评判的。&/p&
我理解的本科应届生水平合格: 能有一门熟悉的编程语言,具备完整的计算机基础知识体系(如操作系统,计算机体系结构等),能在指导下完成项目的功能的正确实现优秀: 能有几门熟悉擅长的编程语言(如C++, Python等),具备完整的计算机知识体系观,具有融汇贯通…
&p&大学里一个同学,不是同班的,我们关系比较好。一天什么时间做什么事情,无比精准,每天中午就那个点吃饭,每天晚上就那个点睡觉。他就属于那种平时努力得不得了,期末更努力的。他有极强的强迫症,就是那种考试前就要确保自己能考[0,100]区间内任一分数的准备考试。他在大学前就提前学了很多计算机的知识了,不是那种什么高中参加信息学竞赛那种,而是似乎一出生,就要立志成为一名计算机科学家的那种全方位成长的。我们当时有一门课是密码学,但是课程设置有些问题,除了离散数学,并没有其他的为这门密码学设置的其他高级数学课程,他就自己首先把北大那本很厚的两个大妈写的离散数学自学了一遍,然后在业余时间给他们全班上课,讲这本书里的一些比较深的内容。他说过几句话,我印象最深刻,第一句是:“我最快乐的事情就是周五回家坐在沙发上,一边喝咖啡,一边看数据结构”第二句是:“我的理想是让全世界的企业都用上我做的安全协议”。大学里不是有很多那种课程设计吗,他就是把课程设计当成非常严肃的工程,非常专业,完全就按照企业里的正规流程和标准从头到尾做一遍,一丝不苟。反正我就觉得他像机器人。 我最佩服的一点是什么呢,就是本科里学的那些计算机的课程,他早就学过了,有时候甚至比教这门课的老师还要清楚里面的道道,但是他从来不缺一节课,上课都是最早去占座,作业没缺过一次,上课极端认真,聚精会神。我有一次忍无可忍说:“你这不都会了吗?”他说:“不行不行,我还有很多不足”我觉得这并不是谦虚,而是他自己是真的觉得自己有很多很多不足,当然是以一种很高的标准。本科大二的时候就被院里的大牛教授看中去跟着博士生做科研。毕业保研以后放弃了,去了美国一所计算机前20的学校读phd,密码学顶会顶刊发了很多篇。现在在google &/p&&p&我想,这与他的家庭教育也有密切关系,父母都是中科院的研究员,而且都和计算机相关。&/p&&p&我最佩服的一点是 计算机专业,有很多所谓的【人才】喜欢不走寻常路,每天编程不分昼夜,给那些外包公司写代码,用各种很fashion的语言写程序,不停的接项目,感觉自己牛逼哄哄的,从来不正眼看人,觉得世界上自己最牛逼了,感觉其他人都是动手操作能力不强的傻逼。但是这位朋友是那些奇淫技巧都知道,也能不分昼夜地写很多很多高质量的程序,但是完全不屑于做这些事情,而是把理论基础学的非常扎实, 也特别明白理论基础的重要性,比如他就学了很多数学,虽然曾经被离散数学老师当面说:“你不适合学数学”。。。 但是还是学了很多数学。&/p&
大学里一个同学,不是同班的,我们关系比较好。一天什么时间做什么事情,无比精准,每天中午就那个点吃饭,每天晚上就那个点睡觉。他就属于那种平时努力得不得了,期末更努力的。他有极强的强迫症,就是那种考试前就要确保自己能考[0,100]区间内任一分数的…
&p&说一下我的经历吧,&/p&&p&2007年本科毕业去了一家国企做嵌入式开发,两年之后又去读了3年研究生,学校是一个末流的985。毕业以后去了一家银行做开发,觉得加班多学不到什么技术,又跳槽到互联网行业了。后来兜兜转转来到了BAT,非常底层的职位,当时和我同龄的都是已经 P7 了。那个时候面试的潜规则是35岁没有到 P7 是不要的,我心里想着我还是很幸运,毕竟已经快 35 了。&/p&&p&后来肉身翻墙,到了国外。在一个会议上看见了一个爷爷级的工程师,好像级别也不高,在 Flink 的那个母公司。所以我觉得,IT 人是能在一线城市生活一辈子,主要是看你在的一线城市的供需关系怎么样。在国内,其实很多互联网公司就是纯搬砖,没啥技术含量,工作10年和工作2两做出来的事情效果差不多。所以,如果你没有提升到很高的层级,其实是很难再国内一直做下去的。&/p&&p&我在国内的跑道上已经落后了,于是我换了一条跑道。&/p&&p&-------------更新, ----------------------&/p&&p&很多人对我怎么肉翻感兴趣,其实网上很多经验了,不过我之前也记录了一下,感兴趣的朋友可以看看。&/p&&a href=&//link.zhihu.com/?target=https%3A//www.cnblogs.com/javanerd/p/7508399.html& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&大龄程序员肉翻记录【一】 - JavaNerd - 博客园&/a&&a href=&//link.zhihu.com/?target=https%3A//www.cnblogs.com/javanerd/p/7509819.html& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&大龄程序员肉翻记录【二】 - JavaNerd - 博客园&/a&
说一下我的经历吧,2007年本科毕业去了一家国企做嵌入式开发,两年之后又去读了3年研究生,学校是一个末流的985。毕业以后去了一家银行做开发,觉得加班多学不到什么技术,又跳槽到互联网行业了。后来兜兜转转来到了BAT,非常底层的职位,当时和我同龄的都…
&p&很多朋友评论及私信问到关于刚学完C/C++语法部分,有什么好的项目可以上手实践...
&/p&&p&突然想到了叶神的JSON库的开源教程,强推:&/p&&p&&br&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/miloyip/json-tutorial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&miloyip/json-tutorial&/a&&/p&&p&_________________________________________更新分隔线&/p&&p&&br&&/p&&p&火车晚点了,闲来无事就强答一下大概说说我的历程吧。&br&首先我不认可有些回答下以学习时间来论努力的方式,得到的结果才是,所以我不会提及我是怎样花时间的。&br&
不比oi出身甚至小学就接触编程的大佬,大学之前的我对编程毫无概念。&br&
确定录取某渣二本的cs专业后,在家闲着也是闲着,就大概了解了下,然后通过mooc看翁恺老师的C语言入门正式开启了编程路(至今针对向我咨询的萌新,我也还是强推翁恺老师的这套视频)&br&
大一上:因为暑假基本懵懵懂懂的学完了翁恺老师的那套视频,大概半个月搞定了教我们的老师自己编写的C语言教材,然后花了二三天做了个控制台界面的贪吃蛇(没排行榜,当时实在没弄明白文件流),然后又花了半个月细细品读了K&R(的确是品读,这本书让我感受到了一本好书带来的快乐和重要性),也总算很浅的弄明白了文件流,这时候再做个控制台界面的东西让我提不起兴趣了,就了解到了easyx,花了二三天搞明白怎么用,然后花了一天又写了个图形界面的贪吃蛇,并且这次有了排行榜(我对贪吃蛇到底有多大的执念啊…),然后又找了c primer plus看,很快的看到大概指针那块,觉得没啥难度,都是老生常谈,就放下没看了…&br&
至此,大一上大概过了一个半月的样子,因为领先班里绝大多数同学,加上没了方向,大概沉沦了一个多星期天天召唤师峡谷。有一天跟高中搞oi,当时acm实验室的室友吹水的时候,才发现自己屁都不懂…(至于为什么我没进acm实验室,因为当时自卑啊,听说还要考试,觉得自己铁定进不去,然后后来发现差自己很多的都进了,还是挺后悔的)&br&
然后开始重新寻找方向,根据了解,这时候摆在我面前的方向大概是:&br&1.学硬件搞嵌入式(但对硬件不感兴趣,否决)&br&2.学C#,可以搞windows平台的客户端(wpf),可以以此学unity搞游戏,还可以搞网页(前景不好,否决)&br&3.跟随大流学java(跟大流?不存在的,否决)&br&4.前端(搞网页没兴趣,否决)&br&5.移动端(没兴趣,否决)&br&6.C++(据说难度很大?就你了)&/p&&p&(ps:人生苦短,我用python,珍爱生命,远离C++)&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-240a68c156d1efeaaa0885acc0ebf939_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1797& data-rawheight=&1332& class=&origin_image zh-lightbox-thumb& width=&1797& data-original=&https://pic4.zhimg.com/50/v2-240a68c156d1efeaaa0885acc0ebf939_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&
从此就开始了愉快的c++入坑之旅&br&
c++ primer plus 走一波&br&
嗯…这本书看到了临期末前的半个月终于算是弄了个大概明白,过程性语言部分因为有C的基础没啥问题,oop和template部分花了不少功夫,stl部分被虐得怀疑智商…&br&
接下来的半个月预习期末+在代写群里接单代写C和C++的课设&br&
大一上书单总结:&br&
《C语言程序设计》——学校老师编写的&br&
《K&R》&br&
一部分《C primer plus》&br&
《C++ primer plus》&/p&&p&
emmmmmm,写这个太耗时间了,手机码字不易,接下来的就直接列书单了&/p&&p&
大一寒假:《编码》《csapp》&br&
大一下:《effective c++》《算法》《离散数学及其应用》《C++ primer plus》二刷&br&
大一暑假:《C++ primer》《C#入门经典》&br&
大二上:《linux鸟哥私房菜》《现代操作系统》《程序员的自我修养》《C++ primer》二刷&br&
大二寒假:《C++标准库》,同时完成了一个很简单的mini stl&br&
大二下:《effective C++》二刷,数据库系统基础教程……待续&/p&&p&
真正的把书单列出来,才发现自己好像也没学多少…所以说一开始说的强答还是没毛病的…而且也没啥拿得出手的项目…&/p&&p&
大概就是这样…欢迎批评…&/p&
很多朋友评论及私信问到关于刚学完C/C++语法部分,有什么好的项目可以上手实践... 突然想到了叶神的JSON库的开源教程,强推: _________________________________________更新分隔线 火车晚点了,闲来无事就强答一下大概说说我的历程吧…
&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/474112& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-839d8979d98dac7ba13b5351_b.jpg& data-lens-id=&474112&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-839d8979d98dac7ba13b5351_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/474112&/span&
&/a&&p&这个作品始于2016年上半年,应该是高一下学期开学没多久,我奶奶转了一个德国的魔方机器人的视频给我,视频里的机器在一秒钟之内就复原了一个三阶魔方。我当时觉得特别有意思,因为我比较喜欢玩魔方,当时又选修了有关Arduino的校本课程,就抱着试试看的心态准备自己做一个魔方机器人。&/p&&p&中间遇到了特别多的困难,我也不是一直时间充裕,因此这个魔方机器人断断续续到2017年11月才最终完成,复原了一个打乱的魔方。制作过程就不赘述了,简单介绍一下它本身吧。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-ad51db21adb31ae7bae16_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&https://pic2.zhimg.com/50/v2-ad51db21adb31ae7bae16_r.jpg&&&/figure&&p&先介绍一下工作流程。首先需要把打乱的魔方以展开图的形式把各个面各个色块的颜色输入计算机,执行一个C++(其实只是C with STL哈哈哈)程序输出魔方解法步骤。然后把解法复制到Arduino的代码里,烧录进单片机。单片机随即控制步进电机执行解法,复原魔方。复原过程平均来说在五秒钟之内可以完成。&/p&&p&解魔方的算法叫&b&Thistlethwaite's Algorithm&/b&,以群论为理论基础求解魔方。对于这个算法来说,魔方不再是由颜色,而是每个棱块角块的相对位置和朝向表达。因此,有别于人类使用的层先法,CFOP之类的方法,这个算法极其抽象,但是优点是稳定高效,解法较短。感兴趣的话可以戳这两个链接深入了解一下:&/p&&a href=&//link.zhihu.com/?target=https%3A//www.jaapsch.net/puzzles/compcube.htm& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Puzzling&/a&&a href=&//link.zhihu.com/?target=http%3A//tieba.baidu.com/p/%3Fsee_lz%3D1& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-0ebcf91b05_180x120.jpg& data-image-width=&580& data-image-height=&341& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【蚂蝗】浅析魔方中的群论_魔方吧_百度贴吧&/a&&p&总之,我是历尽千辛万苦才从互联网的一个不知名的角落找到了一个仍能编译运行的C++实现。我再自己写了一段代码,把魔方的颜色表达转换为棱块角块相对位置的表达。拼起来以后就是求解魔方的部分。&/p&&p&硬件部分主要用到了&b&Arduino MEGA2560&/b&,6组&b&42步进电机&/b&+&b&L298N&/b&,和一个直流稳压电源。我查了很多技术文档才终于把接线和控制代码对应起来,又历经一番胡乱的调参,才终于实现了单片机对步进电机的控制。&/p&&p&我使用的魔方是&b&GAN356&/b&,一款容错性能极佳的魔方。但是还有一个至关重要的优点是它的中心块可以打开,并且是中空的,这就给连接步进电机提供了方便。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-d4d5ea7d19cdfd5373c24_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&434& data-rawheight=&505& class=&origin_image zh-lightbox-thumb& width=&434& data-original=&https://pic2.zhimg.com/50/v2-d4d5ea7d19cdfd5373c24_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/v2-4b03b18c06de93bab20cddc4bb0d5724_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&639& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&https://pic1.zhimg.com/50/v2-4b03b18c06de93bab20cddc4bb0d5724_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-5c5f41c079eedc4cede8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&766& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&https://pic3.zhimg.com/50/v2-5c5f41c079eedc4cede8_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/v2-db5ba25ef44_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&940& data-rawheight=&757& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&https://pic1.zhimg.com/50/v2-db5ba25ef44_r.jpg&&&/figure&&p&如图,我测量了尺寸,设计出了连接件(联想到了可以换多种头的那种螺丝刀的接口设计),3D打印出了成品。7对小东西花了九十几块还不包邮,我买单片机都只花了40不到啊,肉疼。&/p&&p&当我终于看到我的魔方机器人复原了一个魔方,而不是把它拧的更乱的时候我内心的成就感是爆棚的。这么久的尝试终于(居然??)有了结果。&/p&&p&现阶段还有两个遗憾。其一,我没有想到一个好办法做出一个稳定而又灵活能脱开的支架固定步进电机,每次都要靠手拼命按着步进电机才不会跑掉…… 另外,我需要人眼识别颜色再输入计算机,我想使用OpenCV或者Mathematica之类的做颜色识别,苦于水平有限,没有什么好的想法。知乎上大神云集,回答这个问题的最大原因就是希望有人提供点帮助。&/p&&p&更多有关代码和魔方机器人本身的内容我在Arduino中文社区发帖写过。&/p&&a href=&//link.zhihu.com/?target=http%3A//www.arduino.cn/thread-.html& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cubot 魔方机器人-Arduino中文社区 - Powered by Discuz!&/a&&p&&br&&/p&&p&最后放一下GitHub链接。Arduino的代码都是原创的,SOLVECUBE.cpp里面中文注释部分是原创的。&/p&&a href=&//link.zhihu.com/?target=https%3A//github.com/g/cubot& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-263d19ca0ffaad4a0174ea_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&g/cubot&/a&&hr&&p& 更新&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/637760& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-0abca2ee0_b.jpg& data-lens-id=&637760&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-0abca2ee0_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/637760&/span&
&/a&&p&这个视频是我做的一个演示。我最近找到了一个&b&在GitHub开源的&/b&整合了魔方动态颜色识别、即时求解的工具。&b&作者是Daniel Walton&/b&。我在演示视频中先把复原的魔方按照随机的打乱公式打乱,再使用这个工具进行颜色识别和求解,并成功复原了打乱的魔方。&/p&&a href=&//link.zhihu.com/?target=https%3A//github.com/dwalton76/rubiks-cube-tracker& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-dbd89443ebdfae40c69a02_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&dwalton76/rubiks-cube-tracker&/a&&p&这个工具非常的强大和友好。我所做的只不过是调整了几千行中报错的那几行,出错原因应该只是我的OpenCV和Python版本和作者的有些出入而已。整个软件是基于Python的,用到了电脑的前置摄像头做实时的色块检测,并读取RGB值,即时显示在左边。记录下整个魔方54个色块的RGB数值后,另一个程序会根据这些数值确定魔方每个色块的颜色。一旦得到了每个色块的颜色,软件会调用一个用C写成的&a href=&//link.zhihu.com/?target=https%3A//github.com/dwalton76/kociemba& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Kociemba Solver&/a&&b&。&/b&它使用了&b&Herbert Kociemba's two-phase algorithm&/b&,据说这是我之前用的那个算法和实现方式的全面升级版(原理是相似的),&b&平均仅需20步&/b&就能复原三阶魔方。&/p&&p&虽然这完全不是我原创的,但是我还是想来分享一下这个国外大神的项目。如果涉及到任何侵权之类的问题,我会删除相关内容,并且不会把它们用在我的魔方机器人里。&/p&
这个作品始于2016年上半年,应该是高一下学期开学没多久,我奶奶转了一个德国的魔方机器人的视频给我,视频里的机器在一秒钟之内就复原了一个三阶魔方。我当时觉得特别有意思,因为我比较喜欢玩魔方,当时又选修了有关Arduino的校本课程,就抱着试试看的心…
&p&把梗埋在代码里,最多一两年就没了,在 API 里,也许能撑个三五年,但是如果把梗埋在基础通讯协议握手验证字段里,就能永垂不朽了……&/p&&p&我2006年在百度实习的时候做百度搜藏(还有人记得这个东西么),彼时 tech lead 福至心灵想要设计一个新的通用的一点的 RPC 协议。最后不知为什么写代码的变成了我。&/p&&p&这种二进制协议的消息头里经常会放一个类似江湖切口的 magic number 验证通讯两端是不是讲的同一个协议大小端是否一致之类。然后我放了一个&/p&&p&&b&0xfb709394 &/b&(粤语数字梗:出来搞三搞四)。&/p&&p&后来这个协议 somehow 变成了百度一个蛮通行的通讯协议,几乎全百度的服务器都在呢喃着这句粤语切口,网卡灯的每一次闪烁都是来自大吃省的亲切问候。机房外的北京城漫天黄沙,机房里的空气却是初夏广东露天大排档的味道。&/p&&p&作为一个握手验证字段,要改只能服务端和客户端一起改…… 以任何大点的公司都差不多的一团乱麻的内部服务依赖状态这基本是没法动了。就算到了全新的 BRPC, 也不得不留下对这个老接口的兼容代码:&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/brpc/brpc/blob/master/src/brpc/nshead.h%23L21& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/brpc/brpc/bl&/span&&span class=&invisible&&ob/master/src/brpc/nshead.h#L21&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-931aba821ae1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1124& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1124& data-original=&https://pic1.zhimg.com/50/v2-931aba821ae1_r.jpg&&&/figure&
把梗埋在代码里,最多一两年就没了,在 API 里,也许能撑个三五年,但是如果把梗埋在基础通讯协议握手验证字段里,就能永垂不朽了……我2006年在百度实习的时候做百度搜藏(还有人记得这个东西么),彼时 tech lead 福至心灵想要设计一个新的通用的一点的 R…
&p&本人学计算机的!有一个常识或者是技巧竟然。。。。。。&/p&&hr&&p&我觉得吧,学计算机的应该都知道这个cmd命令吧!就是可以打开这个黑窗口!&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-d544a2c33f5f21bfbc62bf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&870& data-rawheight=&512& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&https://pic3.zhimg.com/50/v2-d544a2c33f5f21bfbc62bf_r.jpg&&&/figure&&p&平常用到这个也是比较多的,尤其是敲代码的。那么这个具体有什么用呢?其实图形界面代替了这个黑窗口,我们可以使用命令去执行图形界面可以做的图形化操作,比如说新建文件夹,在做这个演示之前还是先说一下一个技巧吧!&/p&&p&&br&&/p&&p&使用cmd要注意的一个点就是要注意所在目录,比如说我想在这个目录下新建文件夹&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-0d0e25fd2b9ecc24ea2c5b2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&489& data-rawheight=&245& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&https://pic4.zhimg.com/50/v2-0d0e25fd2b9ecc24ea2c5b2_r.jpg&&&/figure&&p&大多数使用cmd是这样操作的,先进入E盘&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f186e1cc709b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&419& data-rawheight=&216& class=&content_image& width=&419&&&/figure&&p&然后再进入上述所说的目录&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-960bf99d26c8fa013110_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&410& data-rawheight=&230& class=&content_image& width=&410&&&/figure&&p&我真的很无奈啊,用得着这么麻烦吗?来,我给你来波骚操作。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/589824& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-af2b1463e63bcfd9b224_b.jpg& data-lens-id=&589824&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-af2b1463e63bcfd9b224_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/589824&/span&
&/a&&p&怎么样,看清楚没有!&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-3aab5ec5cd6a4cc19edc5f0a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&654& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&654& data-original=&https://pic2.zhimg.com/50/v2-3aab5ec5cd6a4cc19edc5f0a_r.jpg&&&/figure&&p&有一天,我同学看见我这样操作,当时就来一句,卧X,还有这操作,我当时就说。。。卧X,你难道不知道吗?后来发现好多人竟然都不知道!&/p&&p&&br&&/p&&hr&&p&接下看看使用cmd怎么创建文件夹&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-aa295bc6c851f41bbc1f5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&672& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&672& data-original=&https://pic4.zhimg.com/50/v2-aa295bc6c851f41bbc1f5_r.jpg&&&/figure&&p&你输入 &b&shut /s /t 1 &/b&试试有什么结果。。。。有惊喜哦!&/p&
本人学计算机的!有一个常识或者是技巧竟然。。。。。。我觉得吧,学计算机的应该都知道这个cmd命令吧!就是可以打开这个黑窗口!平常用到这个也是比较多的,尤其是敲代码的。那么这个具体有什么用呢?其实图形界面代替了这个黑窗口,我们可以使用命令去执…
&figure&&img src=&https://pic3.zhimg.com/v2-14f1ab89_b.jpg& data-rawwidth=&500& data-rawheight=&386& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-14f1ab89_r.jpg&&&/figure&&blockquote&&p&本文是&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何快速成为数据分析师&/a&的第十篇教程,如果想要了解写作初衷,可以先行阅读七周指南。温馨提示:如果您已经熟悉数据库,大可不必再看这篇文章,或只挑选部分。&/p&&/blockquote&&br&&p&在《&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5NjEyMDI2MQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D38b912a77af98efe541bb53dechksm%3Dbffc73ef2cb6b08ec4scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&写给新人的数据库指南&/a&》,我们已经成功的安装数据库,并且导入数据,今天进入MySQL的实战练习。SQL是数据库的查询语言,语法结构简单,相信本文会让你从入门到熟练。&/p&&p&掌握SQL后,不论你是产品经理、运营人员或者数据分析师,都会让你分析的能力边界无限拓展。别犹豫了,赶快上车吧!&/p&&p&以下的语句都在SequelPro的Query页面运行,其他操作页面不会有太大差异。标点符号必须为英文,这是新人很容易犯的错误。&/p&&p&SQL最小化的查询结构如下:&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&k&&column&/span& &span class=&k&&from&/span& &span class=&k&&table&/span&
&/code&&/pre&&/div&&p&table是我们的表名,column是我们想要查询的字段/列,column可以用 * 代替,指代全部字段,意为从table表查询所有数据。&/p&&p&where 是基础查询语法,用于条件判断。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&city&/span& &span class=&o&&=&/span& &span class=&s1&&'上海'&/span&
&/code&&/pre&&/div&&p&上图是最简化的查询语句,将所有城市为上海的职位数据过滤出来。我们也可以用 and 进行多条件判断。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&city&/span& &span class=&o&&=&/span& &span class=&s1&&'上海'&/span& &span class=&k&&and&/span& &span class=&n&&positionName&/span& &span class=&o&&=&/span& &span class=&s1&&'数据分析师'&/span&
&/code&&/pre&&/div&&p&or 语句则是或的关系&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&city&/span& &span class=&o&&=&/span& &span class=&s1&&'上海'&/span& &span class=&k&&or&/span& &span class=&n&&positionName&/span& &span class=&o&&=&/span& &span class=&s1&&'数据分析师'&/span&
&/code&&/pre&&/div&&p&查找城市为上海,或者职位名称是数据分析师的数据,它们是并集。&/p&&p&当我们涉及到非常复杂的与或逻辑判断,应该怎么办?比如即满足条件AB,又要满足条件C,或者是满足条件DE。此时需要用括号明确逻辑判断的优先级。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&p&&(&/span&&span class=&n&&city&/span& &span class=&o&&=&/span& &span class=&s1&&'上海'&/span& &span class=&k&&and&/span& &span class=&n&&positionName&/span& &span class=&o&&=&/span& &span class=&s1&&'数据分析师'&/span&&span class=&p&&)&/span&
&span class=&k&&or&/span& &span class=&p&&(&/span&&span class=&n&&city&/span& &span class=&o&&=&/span& &span class=&s1&&'北京'&/span& &span class=&k&&and&/span& &span class=&n&&positionName&/span& &span class=&o&&=&/span& &span class=&s1&&'数据产品经理'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&这条语句的含义是查找出上海的数据分析师或者是北京的产品经理。当有括号时,会优先进行括号内的判断,当有多个括号时,对最内层括号先进行判断,然后依次往外。&/p&&p&接下来的问题来了,当我们要查询多个条件,比如北京上海广州深圳南京这些城市,难道一个个用and关联起来?这太麻烦了,我们可以使用 in 。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&city&/span& &span class=&k&&in&/span& &span class=&p&&(&/span&&span class=&s1&&'北京'&/span&&span class=&p&&,&/span&&span class=&s1&&'上海'&/span&&span class=&p&&,&/span&&span class=&s1&&'广州'&/span&&span class=&p&&,&/span&&span class=&s1&&'深圳'&/span&&span class=&p&&,&/span&&span class=&s1&&'南京'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&当我们遇到字段数据类型是数值时,也可以使用符号& 、&=、& 、&=、!= 进行逻辑判断,!= 指的是不等于,等价于 && 。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&companyId&/span& &span class=&o&&&=&/span& &span class=&mi&&10000&/span&
&/code&&/pre&&/div&&p&上例是筛选出公司ID &= 10000的职位,为数值时,不需要像字符串一样加引号。&/p&&p&当我们需要取区间数值时,使用 between and&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&companyId&/span& &span class=&k&&between&/span& &span class=&mi&&10000&/span& &span class=&k&&and&/span& &span class=&mi&&20000&/span&
&/code&&/pre&&/div&&p&between and 包括数值两端的边界,等同于 companyId &=10000 and companyId &= 20000。&/p&&p&如果要模糊查找,能用like。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&positionName&/span& &span class=&k&&like&/span& &span class=&s1&&'%数据分析%'&/span&
&/code&&/pre&&/div&&p&语句的含义是在positionName列查找包含「数据分析」字段的数据,%代表的是通配符,含义是无所谓「数据分析」前面后面是什么内容。如果是 '数据分析%' ,则代表字段必须以数据分析开头,无所谓后面是什么。&/p&&p&除了上面所讲,还有一个常用的语法是not,代表逻辑的逆转,常见not in、not like、not null等。&/p&&p&接下来我们学习group by,它是数据分析中常见的语法,目的是将数据按组/维度划分。类似于Excel中的数据透视表,我们以city为例。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&o&&*&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/v2-9cbfe856b9a539c999579fb_b.jpg& data-rawwidth=&1474& data-rawheight=&828& class=&origin_image zh-lightbox-thumb& width=&1474& data-original=&https://pic2.zhimg.com/v2-9cbfe856b9a539c999579fb_r.jpg&&&/figure&&p&它将城市划分成几组,通过group by 可以快速的浏览数据有哪些城市。我们看一下它的高阶用法。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-f6cda86ccc96872dca65c77ccd507ccd_b.jpg& data-rawwidth=&964& data-rawheight=&832& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&https://pic1.zhimg.com/v2-f6cda86ccc96872dca65c77ccd507ccd_r.jpg&&&/figure&&p&上述语句,使用count函数,统计计数了每个城市拥有的职位数量。括号里面的1代表以第一列为计数标准。这里出现新的问题,当我们遇到重复数据怎么办?在DataAnalyst 这张表中,北京职位包含重复的职位ID,我们需要去重。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/v2-40d873fc284c788ab6263_b.jpg& data-rawwidth=&926& data-rawheight=&840& class=&origin_image zh-lightbox-thumb& width=&926& data-original=&https://pic4.zhimg.com/v2-40d873fc284c788ab6263_r.jpg&&&/figure&&p&北京的数据一下子少了2000,多余的重复值被排除在外。distinct 是去重函数,distinct positionId 会只计算唯一的positionId个数。日常工作中,活跃用户数、文章UV,都是用distinct 计算获得,这是唯一标示符ID的重要作用。&/p&&p&除了count,还有max,min,sum,avg等函数,也叫做聚合函数。用法和Excel没什么区别。&/p&&p&当我们在group by 添加多个字段,它将以多维的形式进行数据聚合。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&workYear&/span&&span class=&p&&,&/span&&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&workYear&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-dfc1e5b795cd_b.jpg& data-rawwidth=&938& data-rawheight=&748& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&https://pic3.zhimg.com/v2-dfc1e5b795cd_r.jpg&&&/figure&&p&这就是数据分析师常用的多维分析法,通过group by 切分不同的维度进行对比,在不利用BI的情况下,通过SQL进行快速数据分析。&/p&&p&接下来学习逻辑判断,SQL也有if函数,和Excel的用法一摸一样,通过它我们能进行复杂的运算。比如我想统计各个城市中有多少数据分析职位,其中,电商领域的职位有多少,在其中的占比?&/p&&p&industryField是公司的行业领域,虽然我们能用where like 计算出有几个电商的数据分析师,但是占比的计算会比较麻烦,此时可以用if。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&industryField&/span& &span class=&k&&like&/span& &span class=&s1&&'%电子商务%'&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-98d4f700fcf06ee371eaefb5e9ac7a5c_b.jpg& data-rawwidth=&922& data-rawheight=&804& class=&origin_image zh-lightbox-thumb& width=&922& data-original=&https://pic1.zhimg.com/v2-98d4f700fcf06ee371eaefb5e9ac7a5c_r.jpg&&&/figure&&p&上面的公式利用if判断出哪些是电商行业的数据分析师,哪些不是。if函数中间的字段代表为true时返回的值,不过因为包含重复数据,我们需要将其改成positionId。图片中第二个count我漏加distinct了。之后,用它与group by 组合就能达成目的了。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&
&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&),&/span&
&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&industryField&/span& &span class=&k&&like&/span& &span class=&s1&&'%电子商务%'&/span&&span class=&p&&,&/span&&span class=&n&&positionId&/span&&span class=&p&&,&/span&&span class=&no&&null&/span&&span class=&p&&))&/span&
&span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-ea99f3e85ba2d643b301fcc446e98685_b.jpg& data-rawwidth=&1506& data-rawheight=&792& class=&origin_image zh-lightbox-thumb& width=&1506& data-original=&https://pic1.zhimg.com/v2-ea99f3e85ba2d643b301fcc446e98685_r.jpg&&&/figure&&p&第一列数字是职位总数,第二列是电商领域的职位数,相除就是占比。记住,count是不论0还是1都会纳入计数,所以第三个参数需要写成null,代表不是电商的职位就排除在计算之外。&/p&&p&接下来是新的问题,如果我想找出各个城市,数据分析师岗位数量在500以上的城市有哪些,应该怎么计算?有两种方法,第一种,是使用having语句,它对聚合后的数据结果进行过滤。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span& &span class=&k&&having&/span& &span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&)&/span& &span class=&o&&&=&/span& &span class=&mi&&500&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-6cae67add808a2dd4c39e05_b.jpg& data-rawwidth=&954& data-rawheight=&462& class=&origin_image zh-lightbox-thumb& width=&954& data-original=&https://pic3.zhimg.com/v2-6cae67add808a2dd4c39e05_r.jpg&&&/figure&&p&第二种,是利用嵌套子查询。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0dd8ecfc91deae2eb149_b.jpg& data-rawwidth=&1036& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&1036& data-original=&https://pic4.zhimg.com/v2-0dd8ecfc91deae2eb149_r.jpg&&&/figure&&p&我们将第一次查询获得的城市职位数的结果,看作一张新的表,利用as 将它命名为t1( table1 的简写),将职位数命名为一个新的字段counts。然后外面再套一层select 过滤出counts &=500。&/p&&p&这种查询方式就叫嵌套子查询,使用场景比较广泛,where 后面也能跟子查询。&/p&&p&很多时候,数据是凌乱的,我们希望结果能够呈现一定的顺序,这时候就用到order by语句。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&nf&&count&/span&&span class=&p&&(&/span&&span class=&k&&distinct&/span& &span class=&n&&positionId&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&counts&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&
&span class=&k&&order&/span& &span class=&k&&by&/span& &span class=&n&&counts&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-da63abac6e51de7b440ea646_b.jpg& data-rawwidth=&1188& data-rawheight=&822& class=&origin_image zh-lightbox-thumb& width=&1188& data-original=&https://pic3.zhimg.com/v2-da63abac6e51de7b440ea646_r.jpg&&&/figure&&p&看,数据就按照统计结果升序排列,如果需要降序,则是order by counts desc,后面加一个desc就好了。如果是多个字段,按逗号分隔即可。&/p&&p&我们再来熟悉SQL的常用函数,首先是时间。因为我们的练习数据中没有时间,首先用now创建出一个时间字段。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&nf&&now&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&直接执行它,就能获得当前的系统时间,精确到秒。其实select不一定后面要跟from。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&kt&&date&/span&&span class=&p&&(&/span&&span class=&nf&&now&/span&&span class=&p&&())&/span&
&/code&&/pre&&/div&&p&它代表的是获得当前日期,week函数获得当前第几周,month函数获得当前第几个月。其余还包括,quarter,year,day,hour,minute。&/p&&p&时间函数也包含各种参数,比如week,因为中西方计算第几天是不一样的,西方把周日算作一周中的第一天,而我们习惯周一。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&nf&&week&/span&&span class=&p&&(&/span&&span class=&nf&&now&/span&&span class=&p&&(),&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&除了以上的日期表达,也可以使用dayofyear、weekofyear 的形式计算。它和上面的部分函数等价。&/p&&p&怎么对时间进行加减法呢?这时候靠date_add函数出马。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&nf&&date_add&/span&&span class=&p&&(&/span&&span class=&kt&&date&/span&&span class=&p&&(&/span&&span class=&nf&&now&/span&&span class=&p&&())&/span& &span class=&p&&,&/span&&span class=&k&&interval&/span& &span class=&mi&&1&/span& &span class=&n&&day&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-5fd2cf2e0e3fee925746_b.jpg& data-rawwidth=&756& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&756& data-original=&https://pic1.zhimg.com/v2-5fd2cf2e0e3fee925746_r.jpg&&&/figure&&p&我们可以改变1为负数,达到减法的目的,也能更改day为week、year等,进行其他时间间隔的运算。如果是求两个时间的间隔,则是datediff(date1,date2)或者timediff(time1,time2)。&/p&&p&时间函数的运用比较灵活,没有特殊限定,网络上的文档和教程也不少,可以深入学习。&/p&&p&最后是数据清洗类的函数。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&k&&left&/span&&span class=&p&&(&/span&&span class=&n&&salary&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&/code&&/pre&&/div&&p&MySQL支持left、right、mid等函数,这里又和Excel一样。我们通过salary计算数据分析师的工资吧(这一步骤,在曾经的文章中已经用Excel和BI多次讲解,所以我就不多赘述了,只讲过程,不熟悉的同学可以看历史内容)。&/p&&p&首先利用locate函数查找第一个k所在的位置。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&nf&&locate&/span&&span class=&p&&(&/span&&span class=&s2&&&k&&/span&&span class=&p&&,&/span&&span class=&n&&salary&/span&&span class=&p&&),&/span&&span class=&n&&salary&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic4.zhimg.com/v2-e3accd77dd81fe81bea8a_b.jpg& data-rawwidth=&848& data-rawheight=&632& class=&origin_image zh-lightbox-thumb& width=&848& data-original=&https://pic4.zhimg.com/v2-e3accd77dd81fe81bea8a_r.jpg&&&/figure&&p&然后使用left函数截取薪水的下限。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&k&&left&/span&&span class=&p&&(&/span&&span class=&n&&salary&/span&&span class=&p&&,&/span&&span class=&nf&&locate&/span&&span class=&p&&(&/span&&span class=&s2&&&k&&/span&&span class=&p&&,&/span&&span class=&n&&salary&/span&&span class=&p&&)&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&),&/span&&span class=&n&&salary&/span& &span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-a43c54f2454faaeca925ee_b.jpg& data-rawwidth=&974& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&974& data-original=&https://pic3.zhimg.com/v2-a43c54f2454faaeca925ee_r.jpg&&&/figure&&p&为了获得薪水的上限,要用substr函数,或者mid,两者等价。&/p&&blockquote&&p&substr(字符串,从哪里开始截,截取的长度)&/p&&/blockquote&&p&薪水上限的开始位置是「-」位置往后推一位。截取长度是整个字符串减去「-」所在位置,刚好是后半段我们需要的内容,不过这个内容是包含「K」的,所以最后结果还得再减去1。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-93ef879b0bc4fc7ee7ce610b29c5ac86_b.jpg& data-rawwidth=&1294& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&1294& data-original=&https://pic1.zhimg.com/v2-93ef879b0bc4fc7ee7ce610b29c5ac86_r.jpg&&&/figure&&p&这里不了解不要紧,可以将计算过程分步骤运行。基本上,了解了上面写法的含义,文本清洗这块就没有问题了(not like用来清洗乱七八糟的薪水,我简单处理了)。再然后计算不同城市不同工作年限的平均薪资。&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&select&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&workYear&/span&&span class=&p&&,&/span&&span class=&nf&&avg&/span&&span class=&p&&((&/span&&span class=&n&&bottomSalary&/span&&span class=&o&&+&/span&&span class=&n&&topSalary&/span&&span class=&p&&)&/span&&span class=&o&&/&/span&&span class=&mi&&2&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&avgSalary&/span&
&span class=&k&&from&/span& &span class=&p&&(&/span&&span class=&k&&select&/span& &span class=&k&&left&/span&&span class=&p&&(&/span&&span class=&n&&salary&/span&&span class=&p&&,&/span&&span class=&nf&&locate&/span&&span class=&p&&(&/span&&span class=&s2&&&K&&/span&&span class=&p&&,&/span&&span class=&n&&salary&/span&&span class=&p&&)&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&bottomSalary&/span&&span class=&p&&,&/span&
&span class=&nf&&substr&/span&&span class=&p&&(&/span&&span class=&n&&salary&/span&&span class=&p&&,&/span&&span class=&nf&&locate&/span&&span class=&p&&(&/span&&span class=&s2&&&-&&/span&&span class=&p&&,&/span&&span class=&n&&salary&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&nf&&length&/span&&span class=&p&&(&/span&&span class=&n&&salary&/span&&span class=&p&&)&/span&&span class=&o&&-&/span& &span class=&nf&&locate&/span&&span class=&p&&(&/span&&span class=&s2&&&-&&/span&&span class=&p&&,&/span&&span class=&n&&salary&/span&&span class=&p&&)&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&topSalary&/span&&span class=&p&&,&/span&
&span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&positionId&/span&&span class=&p&&,&/span&&span class=&n&&workYear&/span&
&span class=&k&&from&/span& &span class=&n&&DataAnalyst&/span&
&span class=&k&&where&/span& &span class=&n&&salary&/span& &span class=&k&&not&/span& &span class=&k&&like&/span& &span class=&s1&&'%以上%'&/span&&span class=&p&&)&/span& &span class=&k&&as&/span& &span class=&n&&t1&/span&
&span class=&k&&group&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&workYear&/span&
&span class=&k&&order&/span& &span class=&k&&by&/span& &span class=&n&&city&/span&&span class=&p&&,&/span&&span class=&n&&avgSalary&/span&
&/code&&/pre&&/div&尼玛,知乎的编辑器对齐不方便啊……&br&&figure&&img src=&https://pic3.zhimg.com/v2-b931c071ced_b.jpg& data-rawwidth=&734& data-rawheight=&390& class=&origin_image zh-lightbox-thumb& width=&734& data-original=&https://pic3.zhimg.com/v2-b931c071ced_r.jpg&&&/figure&&p&上面语句,我们用了文本清洗、子查询嵌套、分组聚合、排序等多种用法,属于较复杂的查询。重复数据的问题,因为我是复制了一份北京数据,数量刚好乘二,对平均数没有影响,感兴趣的朋友可以再加一步清洗掉它。&/p&&p&下面是三道思考题:&/p&&ul&&li&查询出哪家公司招聘的岗位数最多;&br&&/li&&li&查询出O2O、电子商务、互联网金融这三个行业,哪个行业的平均薪资最高;&br&&/li&&li&查询出各城市的最高薪水Top3是哪家公司哪个岗位。&/li&&/ul&&p&做完上面的题目,你已经神功初成,数据分析的SQL意见没有大问题了。更复杂的查询,也无非是嵌套更多的内容,本质思路是一样的。&/p&&p&讲到这里,只剩join语法还没有教大家。因为练习数据只有一张表,而join又是SQL中比较容易混淆的难点,我会单独开一篇内容讲解,到时候使用SQLZoo和LeetCode的案例。&/p&&p&LeetCode是知名的算法竞赛网站,可以在上面和全世界的程序员比拼算法,当然我们只练习SQL,完成后,至少能秒杀全世界50%的程序员吧(知乎程序员大牛多,别打我,哈哈)。&/p&&br&&p&——————&/p&&p&欢迎关注我的公众号:tracykanc&/p&
本文是的第十篇教程,如果想要了解写作初衷,可以先行阅读七周指南。温馨提示:如果您已经熟悉数据库,大可不必再看这篇文章,或只挑选部分。 在《》,我们已经成功的安装数据库,并且导入数据,今天进入MySQL的…
&ol&&li&&p&首先需要了解一下什么叫做数据库, 什么叫做MySQL? 数据库简单来说, 就是一个数据存放的大仓库, 比方说, 你的身份证信息, 需要存在数据库中, 如果光靠一个文字版的, 那全国的身份证信息早乱套了, 这个大仓库, 可以取走数据(删除), 可以拿进来数据(插入), 也可以更改一些没有用数据的状态(更新), 当然, 一个仓库肯定是可以查到你数据都是有什么的(查询). 所以, 在数据库中, 一样也有&新增&&修改&&删除&&查找&. 既然MySQL也是数据库的一种, 想当然也有这些. 这里是入门, 不一定要知道原理, 因为学习一个知识, 首先进入这知识里面, 这样才能有机会更多的了解它. 当时你要知道的是, MySQL是一个关系数据库管理系统.&/p&&figure&&img src=&https://pic4.zhimg.com/v2-29e17eecbdbd659bfc3f4_b.jpg& data-rawwidth=&300& data-rawheight=&200& class=&content_image& width=&300&&&/figure&&br&&/li&&li&&p&首先, 我们要操作数据库, 我们就要创建一个数据库, 那么如何创建一个数据库呢? 使用语法:create database 数据库名称;这样的话, 我们就创建了一个简单的数据. 这里我创建的数据库叫做, 所以使用代码为: cr 这样就创建了一个数据库&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e475a48fd1a6a83e8e5d36b200a87838_b.jpg& data-rawwidth=&500& data-rawheight=&142& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/v2-e475a48fd1a6a83e8e5d36b200a87838_r.jpg&&&/figure&&br&&/li&&li&&p&数据库创建好了,这里我们需要注意了, 因为, 我们创建的数据库, 可能不只一个, 那么我们怎么使用刚刚创建的呢? 语法为:use 数据库名称; 这样就可以了. 代码为: 这样我们操作的对象就是mybase的数据库了.&/p&&figure&&img src=&https://pic3.zhimg.com/v2-5bde3b2fd74bea481c39f10a_b.jpg& data-rawwidth=&389& data-rawheight=&128& class=&content_image& width=&389&&&/figure&&br&&/li&&li&&p&数据库有了, 数据库就相当于一个大房子, 房子里, 有书房, 有客厅, 有卧室, 在数据库中, 也存在有表, 视图等概念, 我们具体存放数据库信息的是在表里面, 然后我们就需要知道怎么来创建表(table). 语法: create table 表名(字段名 字段属性); 我们创建一个users的表名.然后里面有username, userid, password字段 代码: create table users(userid int, username varchar(20), password varchar(32), primary key(userid));&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cb6cf304bcf500bac96cb_b.jpg& data-rawwidth=&500& data-rawheight=&154& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-cb6cf304bcf500bac96cb_r.jpg&&&/figure&&br&&/li&&li&&p&表名创建之后, 我们就可以新增数据了, 新增数据使用语法:insert into 表名(字段名, 字段名......) values(值, 值......).&/p&&p&新增一条名字叫做mysql的值, id为1. 然后密码也是mysql.&/p&&p&代码: insert into users(userid, username, password) values(1, 'mysql', 'mysql');&/p&&figure&&img src=&https://pic4.zhimg.com/v2-20f448b0ac_b.jpg& data-rawwidth=&500& data-rawheight=&193& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-20f448b0ac_r.jpg&&&/figure&&br&&/li&&li&&p&数据增加之后, 我们就需要查询一下我们刚刚插入的数据, 我们怎么查询数据呢? 使用语法:select * from 表名;或者 select 字段名, 字段名.... from 表名. 这里需要注意的的是, * 代表全部, 但是在开发中, 推荐大家使用字段名的方式, 代码为: select userid, username,&/p&&figure&&img src=&https://pic3.zhimg.com/v2-469fb644f8db9efa4fbccfb47cee534a_b.jpg& data-rawwidth=&500& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-469fb644f8db9efa4fbccfb47cee534a_r.jpg&&&/figure&&br&&/li&&li&&p&我想把我的数据修改一些, 把密码修改成password, 应该怎么修改呢? 这里的语法结构为:update 表名 set 字段=值 where 字段=值; 这里有一个新的关键字, where, 代表的意思是说, 过滤查询的结果, 只要你想要的结果. 该句话的代码为: update users set password = 'password' where userid = 1; 图为修改之后查询结果的效果. 更新过程中, 除非有需求, 最好都要带上where条件, 特别是运行中的项目, 还有就是, 修改删除数据的时候, 最好能够备份一下数据库, 在重要的时候.&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_b.jpg& data-rawwidth=&500& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_b.jpg& data-rawwidth=&500& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_r.jpg&&&/figure&&br&&/li&&li&&p&现在我不想要这条数据库, 我们怎么删除呢? 使用delete来删除.&/p&&p&语法:delete from 表名 where 字段=值;&/p&&p&这里和更新一样, 在删除数据的时候, 最好能够带上where条件, 即使是没有条件, 这样养成一个好习惯. 对以后写代码有很大的好处.&/p&&p&代码: delete from users where userid = 1;&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_b.jpg& data-rawwidth=&500& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-bb8bb66ed8843aab1c8cdb5_r.jpg&&&/figure&&br&&/li&&li&&p&mysql学习就是这么的简单, 接下来就是你的事了, 自己去练习一下吧. 只有多练习, 才能写出来牛逼的sql语句.&/p&&/li&&/ol&&p&注意事项:&br&&/p&&p&数据库的语句, 其实就是4个, 增删改查. 这些会了, mysql就算学会了, 关键在于你怎么去用

我要回帖

更多关于 程序员开发文档怎么写 的文章

 

随机推荐