- 安装 JDK
- 安装 maven
- 安装 tomcat
- 安装 IDEA
- 链接中没有安装git,如果需要安装 git ,也很简单。
输入brew install git
安装,输入git --version
检查是否安装成功
写给想学习编程的朋友
朋友建议我写一篇关于从没接触编程到现在入行的经历,我想我的经历或许真的可以鼓励更多的人。于是,我大概写了写。其实总结起来或许就是一句话:想做,就慢慢靠拢它,然后去做就好了。或许结果没有你想象的世界那样繁华,至少,你看到过这个世界的一角。
因为我是没读过大学的,通过培训,学习的编程。自然我也接触过不少没读过大学的,或者不是计算机相关专业的学生,通过培训,入行的。也有很多计算机专业的学生觉得自己大学没学好,参加培训的。
我家是农村的,所以对于电脑的接触是很少的。高中的时候,只去过两次网吧,会开机,会在百度上搜索电影,会打开 QQ 聊天,听 QQ 音乐。对于电脑的接触,也就是这些了。
我是如何得知编程并打算学习编程的
刚高中毕业那会,很迷茫,不知道自己要干什么,能干什么。从百度上搜索,「高中毕业的女孩子适合学习什么技能」,第一个出现的就是编程培训学校的广告了,里面的课程分为软件工程师、网络工程师、网络营销等等。然后我就去搜索 软件 软件工程师 编程 等这类关键词。当时我并不知道 软件是什么,编程是什么。通过搜索,我大致知道了那是个什么玩意儿。当然,也搜索到了,说学习编程不容易,但是,努力的话高中生也是可以学会的。也搜索到了,软件工程师是一个薪资相对较高的职业。也搜索到了,虽然有高中生从事编程的,但是很多都是越到后面,遇到的瓶颈越多。。。。。。。
在大致了解了之后,为了确认自己真的是可以接触编程的,我又去网上搜索了一些编程的培训视频,我记得那时搜索到的是 c 语言的,听了一小节课后,我觉得我还是听得懂的,于是乎,就从工厂里面辞职去北京学习编程了。
如果问我哪来的勇气去学习编程?我的勇气就是大致了解并且看了一节培训视频之后,我相信自己是可以学会的。这或许不是勇气,只是对自己的信任。
当然,我并不希望你是一点点了解都没有,或者因为别的原因就盲目的来学习编程。尽管学习编程之后,你或许就会明白,什么叫做「活到老,学到老」,或者,那句话,「学习就是一种生活方式」,甚至是改变了你的生活。
学习编程必须要保持学习的热情
编程,并不像别的技能一样,学会了,就是会了,就拿着这个学会的技能,不需要再学习或者以后很少学习了。这是个,你一天不学习都会焦躁的领域。至少我是这样的。或许因为我基础薄弱吧。
所以,如果你不是一个乐于学习的人,或者,你想工作的很安逸我觉得并不适合来学习编程。
怎样开始学习编程
我觉得对于没有计算机基础的人来说,无论是学习效率还是效果来看,通过培训都是一个很好的方式,因为跟着老师的节奏,每天可以稳定的学到些知识以及实践的能力。
很多编程培训的老师讲的是十分仔细的,知识点之多,都有点让人都消化不了,所以,尽自己最大的努力去学习,尽管没有全部吸收,也是足够入门了。我觉得就跟上学差不多吧,每节课认真听讲,老师布置的任务好好完成,最后一定能拿到让自己满意的结果。
学习编程后找工作
对于想入行的人来说,找工作是一个让人很担忧的环节,害怕自己找不到工作等等。也是在一开始学习编程的时候最担忧的问题吧。其实,和担心自己学不会,我觉得本质上是一个问题,如果你好好学,肯定学的会,如果你学得会,怎么会找不到工作呢?
当然也不得不承认,初步找工作的时候,包括面试通过进入公司初期,还是有很大压力的,至少对于我来说就是。可是,你肯定也知道,这些都是可以克服的,毕竟在北京(或者别的一线城市),公司是很多的。刚开始出来投简历,海投的话,一天也能接到不少公司的面试邀请。当然,很多去了就相当于白去,但是,我接到邀请了必去,一是,万一这公司接收我了呢;二是,去面一下,或许能获得些面试经验,让我下次的面试更加从容;三是,可以看看市场的大概情况,衡量自己的”价钱“。
刚入职去一个好公司是很重要的。我说的好公司是,能让自己成长的公司。并不是每个公司都能让自己成长。
工作后也不能懈怠
至少对于编程来说,我觉得从来没有不需要继续学习了这种状态。到现在我觉得自己还是接触了皮毛,编程的知识海洋,我别说一个石子了,连个砂砾都没有捡到呢。不过,不能看我形容的这样,你就望而生畏了。或许不只是编程,在任何行业想要精进,都必须不断学习。
有很多编程的书都已经讲过这方面的话题。业余时间,甚至是工作时间都要保持自己是进步的。只有这样,才可持续发展。
我读到一本书《程序员的职业素养》,美 Robort C. Martin 著,里面讲到关于专业人士的话题,看过这段之后,我才知道,很多方面,我都是非专业的。不能在承诺的时间内完成任务,就是不专业;出现bug后,觉得出现 bug 是难免的,这就是不专业;专业主义的精髓就在于将公司利益视同个人利益。
我不知道,是有了专业主义的心态才能成为专业人士,还是,有了一定专业能力才成为了专业人士。专业人士没有足够的能力,是很难做出专业的事情来的,但是,没有这个专业的心态,我觉得也是很难成为专业人士的吧。
最后的一点建议
其实,就算一个大神在你面前,你问他怎么能学会编程,或许他能给你一些学习资源,但其实还是一句话,就学呗。
虽然,学习是有些方法论,但是,却没有捷径,不管哪条路,都得付出自己的时间和精力。所以,你安心的去学就好了,你肯定也能找到自己的学习之路的。不要焦躁,哪怕像个无头苍蝇,你也能撞出来个门,那就扎下去,飞出来吧。
最后,祝你能开始做你想做的事。
gem 'delayed_job_active_record'
bundle
rails generate delayed_job:active_record
rake db:migrate
config.active_job.queue_adapter = :delayed_job
Here is an example of changing job parameters in Rails:
|
|
RAILS_ENV=production bin/delayed_job start
Caching with Rails
参考链接:
https://gist.github.com/xiangzhuyuan/cb1bfb00c5d56583bb5d
https://ruby-china.org/topics/19389
https://ruby-china.org/wiki/rails-caching
https://www.youtube.com/watch?v=eO8tTPDEB8A&index=4&list=WL 等一系列 railscast 视频
这几个链接对 rails cache 说的很详细,看不懂的话可以先多看看视频,然后再去读一遍文章,这样更能理解一些吧。
下面是我初步的一些理解以及初步所能掌握的部分,以后有待完善。
缓存的作用:
避免频繁查询数据库,在最短的时间内把真正需要的内容返回给客户端。(cache是提高应用性能重要的一个环节。)
缓存的使用情境:
经常被访问到的页面,并且页面内容不经常改变,且对时效性要求不是十分严格,或者是,在缓存使用过程中要特别注意真正的内容是否被改变,及时捕捉变化并响应最新的内容。一定要保持缓存和实际记录的一致性。不一致的缓存会导致很多不必要的问题。
如果经常改变内容的页面,可以使用 fresh_when
, 这样可以对时效性有更好的控制。如果页面没有敏感信息,可以设置 fresh_when @product, public: true
,这会缓存在一个 public cash。(rack_cache)
这两者也可以结合使用。
需要缓存的地方:
静态页面
无变化的动态页面
动态页面片段
应用程序数据
MemCacheStore
下面这段是 rails guide 中的说明,由于这个使用较多,就单拿出来记录一下
ActiveSupport::Cache::MemCacheStore
这种存储方式使用 Danga 开发的 memcached 服务器,为程序提供一个中心化的缓存存储。Rails 默认使用附带安装的 dalli gem 实现这种存储方式。这是目前在生产环境中使用最广泛的缓存存储方式,可以提供单个缓存存储,或者共享的缓存集群,性能高,冗余度低。
初始化时要指定集群中所有 memcached 服务器的地址。如果没有指定地址,默认运行在本地主机的默认端口上,这对大型网站来说不是个好主意。
在这种缓存存储中使用 write 和 fetch 方法还可指定两个额外的选项,充分利用 memcached 的特有功能。指定 :raw 选项可以直接把没有序列化的数据传给 memcached 服务器。在这种类型的数据上可以使用 memcached 的原生操作,例如 increment 和 decrement。如果不想让 memcached 覆盖已经存在的记录,可以指定 :unless_exist 选项。
config.cache_store = :mem_cache_store, “cache-1.example.com”, “cache-2.example.com”
gem 'dalli' # Rails 默认使用附带安装的 dalli gem 实现这种存储方式
MemCacheStore 中常用的方法:
|
|
一些技术问题的解决方案
解决方案
支持别人的网页嵌入自己的服务
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
|
|
访问修饰符
Private Methods
So you can only call Private methods from the current context of the object, and you can’t call Private methods with a receiver, even if that receiver is self.
只能在当前实例里面调用,实例自己调用也是不行的,是这样理解么。 class 里面可以调用,instance.api_value就不行了。 self.api_value 也不行。
Protected Methods
However, if you call the method with self it will work:
So the important thing to note here is, you can call Protected methods inside the context of an object of the same type.
生成 8 位数字码
rand.to_s[2..9]
查看ssh key
➜ goldendata-api git:(master) cd ~/.ssh
➜ .ssh cat id_rsa.pub
ssh-rsa AAAAB3Nz…….
登录 uat 的数据库
登录到远程服务器
ssh 地址
进入到 项目的 目录:
cd /var/apps/project/
进入到 current 目录:
cd current
进入到rails console,做表的操作
RAILS_ENV=uat bundle exec rails c
压力测试
siege
参考: http://www.cnblogs.com/dw729/archive/2013/04/16/3024338.html
cookie 的校验
params 要是 encode 后的
在提交成功的页面的 header 中寻找 cookie 和 params
下面的 cookie 和 params 从提交成功的页面 network 里面可以看到。
|
|
siege -c50 -t60S -H ‘Content-Type: application/json’ ‘http://domain.com/path/to/json.php POST {“ids”: [“1”,”2”,”3”]}’
ab apache test:
参考 http://www.ha97.com/4617.html
postdata.txt 里面写 encode 后的参数
ab -n 4000 -c 2000 -T ‘application/x-www-form-urlencoded’ -p postdata.txt https://uat.jinshuju.net/f/x6fXZV
bootstrapvalidator
http://bootstrapvalidator.votintsev.ru/settings/
打开本地 redis
redis-cli
同事分享
https://workflowy.com/s/EuhH.J0gNr5G9LD
获取 ssh
- ~/.ssh
- cat id_rsa.pub
header,body,footer
看测试ing 的 error
ctrl + t
查找
ps -x | grep elastic
git branch
删除远端 branch: git push origin –delete 67_exam_score
删除本地 branch: git branch -d 67_exam_score
把远端分支拉到本地 git checkout --track origin/daves_branch
snipaste
截图什么的。
gemset
查看当前所有的 gemset 和 当前使用的 gem 管理空间
rvm gemset list
.ruby-gemset 里面有我这个 项目使用的 gem 管理的 文件夹。
ls -al 可以看到有 .ruby-gemset
点一遍 所有的页面 按钮
1 to 01
sprintf ‘%02d’, 1
查看进程
ps -x | grep elastic
杀死进程
kill -9 390
启动 es
➜ bin ./elasticsearch -d
mini test
m test/controllers/entries_controller_test.rb:130
RUN_COVERAGE=false rake
自定义 bootstrapValidator 验证器
http://www.itdadao.com/articles/c15a302743p0.html
部署后登录错 uat 环境了,所以看到代码一直没变,哎,下次遇到这种问题,要想想
api 部署被覆盖,所以代码没有生效
撤销 commit
git reset –hard c9a9eec9c9b39f7522b9098deada053f1cca0e63
HEAD is now at c9a9eec Merge branch ‘master’ into dev
git push -f origin dev
git branch 命名有特殊字符,会 push 不上去
通过 git branch -a 可以查看当然的分支及远端分支
git checkout 到去掉特殊字符的分支,然后重新 push ,这个可以把当前分支的commit 也一起commit 到新的分支,不用担心漏掉。
git status 的时候,有一些没有清除的操作,是之前 rebase 的时候没有操作完全,后面又merge了吧
所以 现在解决是通过 git rebase –continue 一个一个的把 Next commands to do (2 remaining commands) 搞到 Last commands done (7 commands done) 这样才能把之前 rebase 停止的部分一个个解决掉,每 continue 一次,检查一下 git status看有没有冲突,有冲突解决一下 。(rebase 的时候,如果有 commit 冲突,就会在那个commit 停止,要把后面的一个个 continue 才能 完成这些操作。)
在本地 image 不加 .png 这种文件后缀是不会报错的,但是到了 uat 或者生产环境就会有错。猜想有可能是 assets pipeline 加密的时候有问题,所以没办法正常使用。
使用 asset_path(“themes/background/#{template[:name]}.png”) 可以拿到加密后的图片,在js中使用
gitk 可以调取查看git的窗口
jquery unshift
matchFields.unshift({id: ‘x_field_1’, text: ‘扩展属性’})
这个结果返回的是 插入的 index,而不是 matchFields
gem ‘zeroclipboard-rails’ 配合 turbolinks 使用的时候注意,要先销毁 ZeroClipboard
|
|
自定义 jquery-validate
gd-rt-lottery 中有 callback
code-verify 中有 自定义验证器
rails 异步执行
http://edgeguides.rubyonrails.org/active_job_basics.html
Zen Rails Security Checklist
https://github.com/brunofacca/zen-rails-security-checklist
考试0秒问题
这个bug也是解了很久,但是我没有解决掉。
但是通过观察,可以发现,在 safari 中第一次打开浏览器是很容易出现 0 秒的。
后来定位到问题是 safari 在写跨域请求的时候,如果你之前没有访问过应用的链接,在往应用链接下写 cookie 的时候是不 work 的,在清除 safari 历史记录之后,百分百重现 0 秒。
因此,问题找到。解决方案就是,要在考试提交前,访问一次应用的链接。
- 第一种想法是自己偷偷在这个应用 controller 中访问,但是是不可行的,safari 记录的貌似是浏览记录。
- 增加了考前必读,让用户先从 应用中进入考试的表单,这样提交的时候就可以跨域写 uid 了。
性能问题总结
背景:企业版应用授权反应十分慢。
初步疑惑:个人版和企业版代码是一样的,为什么企业版就慢了?
先是查看代码,是不是代码本身问题,但是记录日志时间相差都很小,可以确定不是代码问题。
后来讨论之后,还是觉得部署环境有问题
- 排除了一下代码的可能性。
继续跟进,去找企业版,看api处理速度,企业版api也没问题。
给出解决方案:在 uat (因为uat也是很慢的)
- 写一个很简单的 controller 去访问 curl,看看是不是最简单的代码都慢,如果最简单的都慢,就可以十分肯定不是代码的问题。
- 不是代码的问题就是环境的问题,就得配合豪哥看到底是哪块的问题。
配合发起请求,在此这过程中本可以锁定问题,但是因为在一个环节理解错了,没有定位出来。
后来豪哥也是想了好几天才又一次执行错误理解的部分,结果证明确实是这里的问题,(这一块也主要想企业版环境和个人版到底有何不同)。
是因为 css 等要先经过 dns 解析还是什么?去掉这块指向就快了。
总结是:固定一些条件,排除可能性。不要一开始认怂。不是代码的问题也要去跟进问题,毕竟问题总是要解决的,不然留给谁?
让单词别自动分开
加上样式
word-break:break-all
中间打点
http://stackoverflow.com/questions/7023545/truncate-string-with-rails
es task
rake es:form:reindex[20160801,20170901]
rake es:entry:reindex_all
rake es:contact:reindex_all
把这几个跑了之后,才能数据同步到es,es的搜索才能正确执行
backbone el
backbone 的 view 如果指定了 el,就是特定的el,如果没有指定,默认会给一个空的 div 作为 el
by default, backbone view’s el is set to an empty div. so, this.el and this.$el are always present.
可以把 多个空格 格式化成一个空格
‘aa bb cc’.squish!
把所有的 ; 替换成 ;
$textFieldDom.val().replace(/;/g, ‘;’)
rails 获取 ip
|
|
如果没有权限建 rep ,那么fork 是 fork 到了自己的公开地址
转换 csv 为 xlsx
最大的差距
昨天,我本来买的是到台州的高铁,后来老妈跟我说买到杭州,转车回家更方便;然后我想,到杭州的距离更近,那么我能不能把票改签到杭州,结果没有成功,后来我把票退了,又重新买到杭州。结果退票扣了150多块钱,重新买的票比退票返的钱还多了40,前后就亏掉了190块钱。而一开始我就不退的话,中途在杭州直接下车,貌似就不会有这些亏损了吧。所以后来我后悔莫及,打电话给我对象,哭诉我的追悔莫及。后来他还把我说了一顿,你现在还后悔有啥用,亏就亏了呗。
是的,我当然知道,现在后悔无非是对注意力更大的亏损。但是,我还是会这样情绪化的消费自己宝贵的注意力。很多时候都是这样,你懂得一个道理并不能时时的让它鞭策你,很好的运用这个道理。所以我还是需要不断的去审视自己,去改正自己的行为。
今天万维钢在得到的文章里提到的泰勒·科文,说他是文化上的亿万富翁,而泰勒·科文本人的收入比美国家庭收入中位数还低(虽然跟我们比那是很高了)。我想到的是,我能不能在金钱和物质上不富有的情况下,让自己的思想水平等精神上变的比较富有?往往我们在讨论一个人应该在精神上更加富有的时候,都是一些在金钱和物质满足不了自己之后才拿出来的说法,貌似在安慰自己似的。我以前也是这样,但是我现在想达到的精神上的富足并不是为了安慰自己,而是我意识到了,人生最大的差距或许就在精神层面。而物质财富上的差距是可以通过精神上差距的缩小而缩小的。
有一期罗辑思维的视频里面说的,文明是副产品。现在想想,物质财富也是精神思想上的副产品。一个有思想、会进取、有能力的人是不会担心物质财富的问题的吧。因为现在的社会我看到的是,你有能力就不怕创造不了财富,社会上到处需要这样的能力。
我的生活,其实追究到底,物质生活不能提升的最本质的原因,就是自己没有足够创造那些物质生活的能力。我虽然没有抱怨过社会,但我经常抱怨自己为什么没有这样牛逼的能力?
如果看到了这一点的话,其实内心应该是更充满希望的。因为能力是可以通过自己的学习、自己的思考、自己的进取去提升的,是的,是有很大的希望的。所以,不管是多绝望多焦虑的情况,我都还是有一个坚定的信仰的,学习是一种信仰!
我从来没有满足过自己的现状,从而,我就知道,我从来也不能停止进取,停止学习!
来小金的第一个年会
我是一个爱哭的女孩,不管你是看到我哪一面的人,我都得承认,我很爱哭。曾经因为这个都想找个心理医生看看。
嗯,我写下这第一句话的时候就噙着泪水,因为此刻,我还在为自己来到小金的第一个年会感动着,为自己这三个月以来受到的帮助感动着,为自己来到了棒棒的团队感动着。我觉得自己生平第一次被一个公司肯定。我以最真实的面貌面试上了这家如此棒的公司,并且享受着在这里的时光。
从刚面试的时候,方方和alice对我的肯定,给我 pair 的晓峰对我的肯定,以及后来姜姐、家骥、波波、东东,他们对我的帮助,让我的 rails 和解决问题的能力得以进步和提高。大家应该能感受到,对于刚进入公司并且技术很薄弱的我来说,这些肯定和帮助都给了我多大鼓舞和感动。一次次面临具体问题的时候,都是他们在我最着急的时刻给我提示,帮我一起解决问题,我词穷,貌似我说的都表达不出这其中的滋味。每一次解决问题后都能让我兴奋好一阵子。
小金的每个人都很有特点,我想就像今天春雷他们表演的段子一样,每个人都能挑出来说的岂止是虚构的段子,小金充满欢乐,充满正能量,也让我觉得来到小金很幸运很幸福。三人行必有我师,我觉得小金的每位员工,都有值得我学习的地方。
我回北京跟一起培训的同学有聚会过,我觉得他们都很优秀,但是貌似和以前的朋友一样的是少不了对公司的抱怨,但是我很骄傲,我在饭桌上把小金夸了一遍,我说为什么我在的团队超级棒,根本没有你们说的这些问题?他们或许会羡慕我待的团队吧。幸福ing…
像题目开头说的,我爱哭,年会大家一起 happy 的时候我想哭,家人团圆的时候我想哭,受到了一点鼓舞我会哭。或许我就是这样容易受到感动,但是这样似乎也很好,让我感受到很多暖暖的情谊。
2017,让我和小金一起成长!
gem wicked_pdf 的使用
参考 github 网址:https://github.com/mileszs/wicked_pdf
注:我的是 gem ‘rails’, ‘~> 4.2’,所以github官网上有些配置不需要配置
参考链接:
https://reinteractive.com/posts/270-wickedpdf-and-custom-fonts-in-rails
http://cnedelcu.blogspot.com/2015/04/wkhtmltopdf-chinese-character-support.html
https://blog.ragnarson.com/2014/01/13/generating-pdfs-with-custom-fonts-using-wkhtmltopdf.html
1.添加 gem 到 Gemfile
|
|
4.layout: 'exams_pdf'
的配置, 修改的地方就是把 <%= stylesheet_link_tag 'exams' %>
<%= javascript_include_tag 'exams' %>
改成 <%= wicked_pdf_stylesheet_link_tag 'exams' %>
<%= wicked_pdf_javascript_include_tag 'exams' %>
|
|
5.以上四步就可以预览 pdf ;
6.这里加上 dpi: 72
可以加快生成速度,disposition: 'attachment'
这个是作为附件下载,而不是网页预览。
|
|
7.由于 wkhtmltopdf
是依赖系统的字体生成 pdf ,所以要在服务器上安装相应字体,不然到 uat 或者生产环境,没有字体的话,中文都会显示成小框框。
问题列表
- 怎么查看某个方法的原代码?比如 simple_form_for
答:github 啊,全世界的开源项目都在这里啊。google 搜索 simple_form ,会把这个项目所在的 github 找出来。 git clone 命令能克隆到本地。想怎么看怎么看,但是因为这是 gem,所以目录会和我们写的项目稍微不一样吧。
- => 这个符号是什么意思,怎么使用?
答:这个是 ruby 中的 hash ,google 搜索 关键词 ruby hash,跟着google出来的内容,把每一行代码在终端里输入试试。在终端输入 irb ,可立即开启 ruby 运行环境。
- custom route 和named route有什么区别?
答:custom route 指的是自定义 route 吧,就是自定义路径。
除了 rails 自动封装好的那七个之外,我觉得都是自定义。
预设的七个 「 new create edit update delete index show 」.
之外的都是自定义的吧。比如
params中的数据是怎么得到的?
http 请求,也就是 HttpRequest ,在这个里面都会有请求的信息,在控制台上能看到。params 就是通过 request.getParams 这种方法获得的,只不过 rails 给自动获取了,我们通过 params[:id] 直接就能得到 id 的值了。URL和routes 有什么区别?
URL 是指链接,routes是指路由。
比如:http://localhost:8081/paper/form_setting/56/edit 这是 url,
routes指的是 routes.rb 中那些路由设置吧,你看看这个文件就明白了吧。
Using select, reject, collect, inject and detect.
参考链接:
http://queirozf.com/entries/ruby-map-each-collect-inject-reject-select-quick-reference
http://matthewcarriere.com/2008/06/23/using-select-reject-collect-inject-and-detect/
for 遍历数组 ,并打印出来每一个元素
code:
|
|
这个可以 work,但 not very… Ruby.
下面这个才是,ruby 中的 iterator
。
each 遍历数组 ,并打印出来每一个元素
code:
|
|
Building a list of items from the array using select
select , 返回符合条件的 array
code:
|
|
reject,返回不符合条件的 array
reject 当 n>2 为 false 时才会return
code:
|
|
collect,返回 运算 后的 array
code:
|
|
Total the items in an array using inject
inject ,sum 所有元素并返回计算结果
code:
|
|
inject with parameter,带初始参数,从参数开始累计,计算并返回
code:
|
|
inject return an array
code:
|
|
Find an item in the array using detect
detect 查找一项
code:
|
|
返回 3,如果没有找到,返回 nil
。