。我的生活原则应该是什么样?。我的工作原则应该是什么样?
原则有两部:
。生活和工作原则
。经济与投资原则
做一件事情最重要的原则:先起步开始做,如果失败了,总结失败的原因,不断在进行尝试,以最终达到成功;但是我们需要控制自己试错的成本;
。最重要的是去分析失败的原因,总结失败的教训,避免下一次试错时不再继续出现
。
制作一份把事情做成功的流程图,标注过程中我们会遇到哪些困难,然后对应的解决方式应该是怎么样
《经济机器是怎样运行的》
。不要让债务的增长速度超过收入(因为债务负担最重会把你压垮)
。不要让收入的增长速度超过生产率(因为这将最终使你失去竞争力)
。尽一切努力提高生产率(因为生产率在长期内起着最关键的作用)
本次股票下跌原因是啥?
。巴菲特减持比亚迪股票
。美储联加息?
。国内银行加息?
。俄乌能源大战?
回答预设问题:
我的想法:
]]>。我能获得什么经济学知识?。应用该经济学原理,我应该改变哪些经济思维方式?。指导今后的经济学思想?
回答预设问题:
我的想法:
]]>。为什么思考就能致富?。怎么思考才能致富?。作者所处的美国与中国针对本书的观点,是否适用?中国当前时间能否继续适用?
思想的力量(激发潜能的动力之源)
必须要有强力的欲望,用欲望形成强大的信念,进而引导我们达到目标
欲望:成就一起的起点(通向致富之路的第一步)
信念:在脑海里目睹并坚信欲望实现(通往财富之类的第二步)
如果我们不承认限制,那么人脑的潜力就没有限制
无论贫穷还是富裕,都是思想的产物
自我暗示:影响潜意识思维的媒介(通往致富之路的第三步)
强力的欲望 - 制定计划及目标 - 付诸行动 - 强化自我暗示 - 形成信念 - 指导行动
(不要怀疑,跟着计划一步一步的进行,会慢慢打消你的怀疑,直到成功)
专业知识:个人经历与观察(通往致富之路的第四步)
拥有想象力,然后再通往目标的道路上以专业知识来加持
想象力:思维的工厂(通往致富之路的第五步)
精心策划:欲望转化成行动的关键(通往致富之路的第六步)
决心:克服拖拉的坏习惯(通往致富之路的第七步)
毅力:催生信念的持久努力(通往致富之路的第八步)
怎样培养毅力?
a. 以炽热欲望作为实现动力的明确目的。
b. 不停地用行动体现出来的明确计划。
c. 所有消极或不良影响均无法攻破的思想堡垒,这些影响包括亲戚、朋友和熟人的消极暗示。
d. 结交一个或多个能鼓励你将计划和意愿贯彻到底的人
智囊团的力量:致富驱动力(通往致富之路的第九步)
性转移的奥秘(通往致富之路的第十步)
潜意识思维:连接的纽带(通往致富之路的第十一步)
大脑:思想的广播站和接收台(通往致富之路的第十二步)
第六感:通向智慧殿堂的大门(通往致富之路的第十三步)
战胜六个恐惧恶魔(清扫大脑为财富让据空间)
魔鬼工厂(第七种基本“恶势力”)
回答开篇预设问题:
。为什么思考就能致富?
谁都想致富,都想财务自由,都想要诗和远方,但是为什么只有少部分人能成功呢?因为致富需要我们规范自己的行为,找到获取成功的方法,不能让思绪随波逐流随意乱飞,需要改掉身上的坏习惯,需要消除内心的消极情绪,需要强烈的求胜欲望等;只要你习惯思考琢磨,你就能找到门道获取巨额财富,然后去享受思考的回报。
。怎么思考才能致富?
汇聚想法避免思维内耗,确定目标后集中所有能量去实践,将过程中失败的案例加以分析直到取得成功;当然,在实践过程中,我们需要规范自己的行为习惯,清除消极情绪,汇聚所有能达到成功的能量去攻克难关。
。作者所处的美国与中国针对本书的观点,是否适用?中国当前时间能否继续适用?
思考致富不受时间、地点的影响,只要我们生命不止、折腾不止,总会看到胜利的曙光;不过,需要时间的加持。
我有话说:
看我本书,总体的感觉:呈现的内容还是类似心灵鸡汤的感觉,每一条理论拿出来说都对没法反驳,但是具体怎么做没有给出具体的描述,所以最后几章总是提不起兴趣仔细看完;我认为这是一本达到成功所需的行为规范类书籍,让我们规范自己的言行,找寻达到成功的路径。可能是因为我们生活中这类鸡汤太多,每个人都觉得自己是“聪明人”,造成大家已经对这些行为规范脱敏,提不起精力去加以实践;如若,你把自己定位为一个不太聪明的许三多,就一条一条的坚持执行(具体做法可以实践中探索总结),或许,你也不乏找寻出一条成功的路径。具体做法,你可以问问自己如下问题:。我想要什么?需要量化目标(比如我今年要挣100万)。阶段小目标及解决方案是什么? 你需要明确量化阶段小目标及解决方案,前几阶段时间可以拉长一些,因为需要不断试错优化自己的解决方案。定期复盘检验目标完成度,看是否需要作出调整?。完成目标时,分析总结整个周期的注意点:目标设置是否合适?时间周期是否合适?实施是否到位?其实,大部分人都知道这些,我们缺少的就是坚持去实践,所以,行动起来各位,想想诗和远方,你没有拒绝的理由,拒绝摆烂、躺平 ~ ~ ~
]]>记录阅读中缺失或遗忘的知识点,强化记忆;
。JDK7+提供十进制转换为其他进制方法:
1 | // 十转换为二进制,结果: 1111011 |
.##### java补码 源码
。按位操作
位运算有移位运算和逻辑运算。移位有以下几种。
1)左移:操作符为<<,向左移动,右边的低位补0,高位的就舍弃掉了,将二进制看作整数,左移1位就相当于乘以2。2)无符号右移:操作符为>>>,向右移动,右边的舍弃掉,左边补0。
3)有符号右移:操作符为>>,向右移动,右边的舍弃掉,左边补什么取决于原来最高位是什么,原来是1就补1,原来是0就补0,将二进制看作整数,右移1位相当于除以2。
阅读本书时,摘抄了书中具有指导意义的方法,并再文末做了适合自己的方法,指导后续阅读;
作者给出了阅读前的建议:
共振阅读法中的5步共鸣
步骤0:接触书本,明确自己的目的。
步骤1:通过随意翻阅,让大脑“下载”信息。
步骤2:在三栏表格中绘制曲线。
步骤3:从曲线中感兴趣的那一页上摘出单词。
步骤4:凭着感兴趣的单词,带着问题去阅读。
步骤5:基于从这本书中所获得的想法,制订出行动计划
(根据以上步骤我的理解:通过绘制曲线发现自己对书中哪些部分感兴趣,然后挑选关键词进行细度,如果觉得内容引人入胜无需考虑必须在规定时间读完,继续深度即可;完成全书粗度后,需要制定计划和写出你的心得及想法,便于回顾)
进入到“共振阅读”的准备阶段“步骤0”。先从“记下书名”开始,依次按顺序在①~⑥的位置上记录信息:
①写下阅读的目的
②写下页数
③写下作者的名字、绘制出画像或者画个“笑脸”的表情
④随意翻阅,对书中内容进行大致浏览
⑤将从作者那里接收到的信息,简短地写下来
⑥作者为什么必须写作这本书?
写作的建议:
①首先尝试直接“放松”地打草稿
②在撰写书评时,要设想一个读者对象
③“放松”地进行整理
④在文章中加入我们自己的风格特点,并尝试大声朗读出来
制定行动计划:
①看着“共振地图”,寻找与“人”或“事”有关的提示
②从书中的语句联想到提示
③将行动计划记到日程表中
④将计划付诸行动
参加读书会、学习会的三个好处:
·能结识志同道合的朋友。
·能从他人那里了解到与自己不同的观点。
·交流分享我们所学到的东西。
拓展自己专业领域的方法:
1.思考拓展自己专业领域的目的
2.去大型书店逛逛
3.购买8本关于该专业领域的书籍,以及2本非该专业领域的书籍
通过“共振阅读”掌握专业性知识的步骤
①设定阅读的目的。
②将所有的书籍拍到一张照片中。
③随意翻阅所有的书籍,然后休息。
④找出“共振词汇”。
⑤从书中找出与之关联的内容。
⑥用自己的话进行总结。
⑦想出自己的“关键词”。
⑧利用这些“关键词”找到新的切入口(意见)。
⑨基于新的切入口,撰写报告或笔记。
3年后的你
Who(谁)和谁在一起?
Where(场合)在什么样的场合?
When(时间)3年后的几月几日?
What(做的事情)在做什么?
Why(原因)为什么要做那件事?
How(方法)怎样做才能实现?
看完本书,我反思了自己及获得的一些感悟:
。去研究其他的粗度方法,找到适合自己的方式
。分享自己读书的经历,以前不知道怎么读书?就是按许三多似的方法(从A看到Z);现在知道带着问题去看书,而且问题需要明确在脑子中反复浮现多遍、最好是在纸上写下来,方便最后回头过来分析
。读书在于形成理论,优化自己的思维体系,指导自己今后的行动;所以,重在最后的行动
。整理细自己的读书路径,使用钢笔将阅读的精髓记录,便于记忆(没有条件,可以使用网络读书笔记)
1.写下书名、作者、国家、年代、背景(加深记忆,了解本书创作环境)2.提出多个问题(我需要从书中获得哪些知识)3.按书中的共振阅读法找出关键点: a.找出感兴趣的章节、页数 b.根据第一次的筛选,找出感兴趣的词汇 c.对关键词汇进行扩展阅读;钢笔或者网络笔记记录感兴趣的句子或思想 d.找到前面提出问题的答案4.完成全书阅读后,参考书的目录,写出自己的感想及心得;分析与提出问题时的对比,得出总结性的心得;确定该书是否需要细读5.总结所获得的帮助,结合自己的人生、经历
总之,阅读的目的是为了与作者对话,达到与之沟通及思想的碰撞;你可以想象一下作者就坐在你身边,与你平等的进行交流,探讨书中的观点与实例;你可以提出自己的见解,在书中寻找答案,形成自己的思维体系,指导我们更好的生活及工作。
]]>高福利社会需要高税收来支持
]]>阅读时需要问自己的问题:
.为什么要搭建私域流量?
.怎么搭建私域流量?
.怎么运营私域流量?
.怎么变现?
本书上半部分阅读比较细,获得并记忆了作者传递的一些观点,下半部分则实在无法继续细读下去,因为太过于繁杂;我获得的几个观点:
.视用户为朋友,而非韭菜(看中长期价值,而非收割一次就放弃).连接用户 -> 筛选用户 -> 服务用户.重视传播学.标签为王,内容为后(重视原创,打造高质量内容,强化标签记忆,重视传播)
本书强调的是以朋友圈、群来构建自己的私域流量,本书发表时(2020年7月)企业微信早已布局私域,打通和微信好友的沟通,我觉得这个可以拿出来聊一聊。同时,针对阅读本书开始的问题我来说说自己的看法:
.为什么要搭建私域流量?
在当前信息流量爆炸的时代,各种信息满天飞,人们得花时间筛选信息的有效性;同时,因为碎片阅读让人们的时间被分隔为各种片段;在这种泛流量横行的时候,用户及企业需要构建自己的有效流量池(私域流量),增强用户的粘性,打造用户的长期价值; 所以,企业都开始打造各自的私域流量(企业微信、抖音快手粉丝群、知识星球等),同时企业开始打造高质量用户,推出各种会员服务(山姆会员、盒马会员、京东会员等),筛选泛流量中真正能转换为订单的用户,服务好这部分用户。
。怎么搭建私域流量?
简单列举几种常见的私域场景:
.企业微信: 无缝对接微信.抖音/快手粉丝群:沉淀日常对短视频知识或行业感兴趣的用户.知识星球
。怎么运营私域流量?
暂时也不知道,待学习
。怎么变现?
以我比较熟悉的企业微信来说,可以提供营销及管理工具来实现变现;对接企微提供的各种API,来服务企业主,方便企业主运营用户,同时维护用户行为数据,给企业主提供数据分析指导其二次运营。
一些思考:
。怎么把私域的企微账号当着个人微信号来运营?
。做私域工具比直接运营私域更挣钱(毕竟教人挣钱比直接挣钱更容易挣钱)
。私域工具给别人使用的时候,如果收集到的客户需求被采用,上线后可以给他们免费体验一段时间,在需求界面上可以给用户身份曝光,让其觉得尊贵和重要
可以以企微为切入口,实现一个MVP项目对接企业主闭环流程,然后逐步迭代实现变现;若一个企业主对接进入疲软期,可以对接多个企业主,将系统扩展支持多业态多用户,实现灵活变现。
]]>几天的阅读,得到几个记忆深刻的观点:
1.资产是能把钱放进我口袋里的东西,负债是把钱从我口袋里取走的东西2.事业与职业的区别 事业:不需要你亲自到现场就能给你带来资产(钱进入口袋) 职业:给别人打工,通过劳动所得
本书建议我们如何行动?
作者是如何行动的?
根据书中的建议,我应该会重点涉猎两类知识:
。财务知识:了解金钱的本质、现金流的运行方式等 。法律知识:理财实践中,摸清法律规范,最大化收益率
依据理财理念,我的人生规划应该会是这样的大致方向:
1. 让钱为我工作 上班获得理财基金,然后去做让钱生钱的事情;可以尝试先做MVP的事情,验证后让其闭环, 无需人工干预即可实现被动收入(如购买优质银行理财产品、基金、股票等), 不断优化你的策略实现高效益的复利增长2. 打造自己的事业 通过第一步我们可以获得稳定的现金流后,不应该再是单兵作战,应该组建团队发挥群众效应, 然利益持续最大化3. 帮助他人,传道授业
]]>$ command + / # 查看光标位置$ command + T/W # 新建/关闭标签$ command + 数字/方向键 # 切换标签$ command + enter # 全屏/退出全屏$ command + F # 当前窗口查找,tab键选中找到的文本,option + enter 粘贴光标处$ command + option + B # 回放功能$ command + option + E # 搜索所有的窗口标签Tabs$ command + D # 竖向分屏 $ command + shift + D # 横向分屏$ command + option + 方向键/'['及']' # 切换屏幕$ command + ; # 历史命令、自动匹配提示(根据上下文呼出来提示)$ command + shift + H # 列举粘贴历史$ ctrl + U # 清除当前行$ ctrl + A # 到行首$ ctrl + E # 到行尾$ ctrl + F/B # 前进/后退(相当于左右方向键)$ ctrl + P # 上一条命令$ ctrl + R # 搜索历史命令$ ctrl + D # 删除当前光标的字符$ ctrl + H # 删除光标之前的字符$ ctrl + w # 删除光标之前的单词$ ctrl + K # 删除到文本末尾$ ctrl + T # 交换光标处文本$ command + R # 清屏$ ctrl + L # 清屏
必备技巧:
# 官网下载对应版本的zk至用户目录(本文实验版本 zookeeper-3.4.9.tar.gz )$ wget http://mirrors.hust.edu.cn/apache/zookeeper/current/zookeeper-3.4.9.tar.gz$ tar -zxvf zookeeper-3.4.9.tar.gz # 解压文件$ cd zookeeper-3.4.9 # 进入zookeeper根目录$ mkdir data logs # 新建目录data(数据目录)、logs(日志目录)$ vi conf/zoo.cfg # 新建并编辑conf/zoo.cfg文件(zookeeper配置文件,默认不存在,可参考提供的文件 zoo_sample.cfg) tickTime=2000 dataDir=/${***}/zookeeper-3.4.9/data dataLogDir=/${***}/zookeeper-3.4.9/logs clientPort=2181 initLimit=5 syncLimit=2
$ cd zookeeper-3.4.9/bin # 进入zk命令目录$ ./zkServer.sh start # 启动zk服务$ ./zkServer.sh status # 查看zk启动状态(打印信息出现"Mode: standalone",即表示zk为单点)# zk基本基本命令[启动|前台启动|停止|重启|查看状态|升级|打印cmd]$ zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
现提供三台服务器(当然你也可以提供一台机器,使用不同的端口来实现),如下:
# HostName: IP
server1: 10.0.0.21
server2: 10.0.0.22
server3: 10.0.0.23
首先,在每台服务器以zk单点形式进行安装,然后分别对zk配置文件 zoo.cfg 添加集群配置:
# server.[myid]:[ip]:[port1]:[port2],具体信息参考博文”zoo.cfg配置”
server.1:10.0.0.21:2888:3888
server.2:10.0.0.22:2888:3888
server.3:10.0.0.23:2888:3888
其次,在每台服务器zk的配置目录conf下新建 myid 文件,同时将上一步配置的“myid”值写入对应服务器myid文件即可;如 10.0.0.21 配置的myid文件内容为“1”,后面两台类推;具体操作:
# 将myid为”1”写入server1的myid文件
$ echo “1” > ~/zookeeper-3.4.9/conf/myid
# 将myid为"2"写入server2的myid文件$ echo "2" > ~/zookeeper-3.4.9/conf/myid# 将myid为"3"写入server3的myid文件$ echo "3" > ~/zookeeper-3.4.9/conf/myid
最后,分别启动或重启zk即完成集群配置,zk会自动选举leader及follower(目前的配置会是一台为leader、两台为follower,使用zkServer.sh status
查看状态)
$ double + shift # 双击shift,可以搜索文件及文件夹(正斜杠打头“/”)$ command + D # 复制当前行到下一行$ command + X# 剪切当前行$ command + J # 智能提示补齐$ command + # 查看类往上查找继承的类或实现的接口$ ctrl + H # 显示类结构(继承)图$ ctrl + option + H # 查看方法调用结构图$ command + B # 全局查找方法调用$ command + option + B # 查看方法的实现细节$ command + f7 # 当前文件查找方法的调用$ command + option + 方向键(左left/右right) # 返回至上、下次浏览的位置$ command + option + T # 给代码添加if、where等语句包括起来$ command + option + V # 给方法调用提出引用变量$ command + option + u # 生成类集成图$ command + option + shift + u # 生成类图 $ ctrl + tab# 切换标签页(唤醒Swither,包含打开的文件及快捷选项入口)$ command + ` # 切换打开的多个窗口$ command + option + L # 格式化代码(若选中及格式化选中代码)$ option + enter # 快速修复(自动导包、快速定义并列出接收方法返回值等)$ command + shift + enter # 快速补全行尾分号、括号及方法等$ commadn + \ # 按请求的URL路径进行搜索$ command + R # 当前文件查找替换$ command + shift + R # 全局查找替换$ command + E # 列出最近查看过文件$ command + shift + E # 列出最近编辑过的文件$ command + shift + A # Rest Client(打开调试用的Http等操作)$ command + shift + T # 选择/创建对应文件的测试类$ command + shift + V # 访问历史粘贴板$ command + shift + u # 将选中内容进行大小写切换 $ command + W # 关闭当前标签页$ shift + click # 关闭点击文件$ shift + esc # 光标返回编辑框,关闭获得焦点的窗口$ F2 # 移动到下一错误代码处$ shift + F2 # 移动到上一错误代码处$ shift + f7 # debug时遇到一行多个方法,查看执行到哪个方法
]]>FROM <IMAGE> # 指定基础镜像MAINTAINER <author> <email> # 指定创建Dockerfile作者及邮箱RUN <COMMAND> # 新镜像上执行命令(每一条RUN执行的命令默认目录都是根目录'/') # 添加宿主机文件至容器内,若是压缩包会自动解压ADD <localhost dir | URL > <container dir> # 只是添加宿主机文件至容器,不处理压缩包文件,ADD命令简化版COPY <localhost dir> <container dir> WORKDIR <path> # 指定RUN、CMD、ENTRYPOINT命令的工作目录
USER <uid> # 设置镜像运行时的UIDENV <key> <value> # 设置镜像环境变量VOLUME <container path> # 设置容器待挂载目录,配合docker启动命令使用$ docker run -v <localhost dir> # 表示容器目录path挂载到宿主机目录(localhost dir)$ docker run -v <localhost dir>:<container path> # 该命令执行效果同上 EXPOSE <port> # 指定容器运行时监听的端口# 容器默认执行命令,Dockerfile只允许使用一次CMD;若多个只执行最后一个ENTRYPOINT ["executable", "param1", "param2", ...]ENTRYPOINT ["param1","param2", ...]# 容器默认执行命令,Dockerfile只允许使用一次CMD;若多个只执行最后一个CMD ["executable", "param1", "param2", ...]CMD ["param1","param2", ...]CMD command param1 param2 ...
注:ENTRYPOINT执行命令不会被ocker容器启动时指定命令(容器名后面接的内容)覆盖,而是作为参数传递进去(即连接到ENTRYPOINT执行命令后面);而CMD执行命令会被Docker容器启动的命令覆盖。如果同时存在ENTRYPOINT和CMD,那么ENTRYPOINT是默认执行命令,且CMD作为ENTRYPOINT的参数;如果没有ENTRYPOINT,则CMD就是默认执行指令。
]]><Host|IP>:8111
,参考如下:创建Project(主要配置部署项目所需的外围工具,如Maven、Git等,可视当前需求配置)
点击右上角Administration -> Create Project -> Manually(手动)
填写项目名,自动生成项目ID -> create -> General Settings
-> Build Configurations: 构建具体项目的部署配置(常用操作);
这里的创建流程和创建Project一样,创建之后左侧的导航栏和父级Project有些差别,粒度更细,针对具体的部署配置。我们可以在左侧导航栏的”Build Steps”制作我们的构建步骤,根据需求制作不同的构建顺序;如Maven编译(Maven的配置在父级)、Command Line(运行shell命令)等。
-> Build Configuration Templates: 创建构建的模板配置
-> Subprojects: 在该项目下创建子项目
点击左侧导航栏VCS Roots
版本控制系统 -> Create VCS root -> 选择Type of VCS(Git/SVN或其他) -> 查看高级选项Show advanced options
,配置连接URL、用户名、密码等信息 -> 点击页面底部Test connection
测试是否可以正常连接
点击左侧导航栏Parameters
-> Add new parameter -> 配置不同范围级别的常量
– Name: 常量名称
-> kind: 常量类型;Configuration parameter(配置级别参数)、System property(TeamCity系统级属性,使用默认加上system.
前缀)、Environment variable(环境变量,使用默认加上env.
前缀)
-> Value: 常量值
-> Spec: 配置常量格式及验证,暂未使用过
注: 定义好不同级别的常量后,可以在项目构建步骤中或添加的shell脚本中使用;用两个百分号括上常量名即可(%<name>%
);子级项目继承父级定义的参数,且子级可以重新修改父级的参数值。
点击左侧导航栏Maven settings
,配置Maven来编译项目 -> Upload settings file -> 弹出框添加名称,选择待上传的mave/conf/setting.xml文件即可
点击左侧导航栏Clean-up Rules
,配置清理TeamCity残留文件 -> 点击待配置项目尾部的Edit
根据需求可以选择不同的策略,选择Custom policy
自定义策略:清除超过多少天前的构建;清理多少个成功构建之前的构建。当然你可配置每天定时清理:右上角Administration -> 右侧导航栏Clean-up Settings -> 配置
配置TeamCity插件
在官方提供的插件库https://plugins.jetbrains.com/?teamcity搜索下载你需要安装的插件,然后上传你下载的插件至安装的TeamCity即可: 点击右上角Administration -> 点击左侧导航栏底部的Plugins List
-> Upload plugin zip
-> 填写名称,选择插件文件上传即可
TeamCity-<version>.tag.gz
,我下载的版本为10.0.4;然后按如下步骤进行:$ tar -zxvf TeamCity-<version>.tag.gz -C <dist dir> # 解压安装包$ cd <dist dir>/TeamCity/bin # 进入TeamCity的bin目录$ ./runAll.sh (start | stop [force]) # 启动、停止(强制)
若以上步骤无错即可访问TeamCity界面:<Host|IP>:8111
,其默认访问端口为8111;若需修改参考(修改配置文件前需停止TeamCity,修改完成再重新启动):
$ vi TeamCity/conf/server.xml # 编辑server.xml配置文件
首次访问该地址会进入配置TeamCity的数据目录页:
数据目录默认为/home/<user>/.BuildServer
,若需修改参考:
# 修改配置文件属性teamcity.data.path即可$ vi TeamCity/conf/teamcity-startup.properties
我们使用默认目录进入下一步;设置存储使用的数据库(默认为HSQLDB),当然你可选择其提供的PostgreSQL\MYSQL\Oracle\MS SQL Server
我们选择默认数据库进入下一步;此时,它会初始化数据库及服务组件,稍等片刻即可进入选择协议license页面,点击接受Accept继续;将进入创建用户页面:
填写完用户名密码后创建用户,即可进入“My Setting & Tools”配置个人信息等信息,点击右上角的”Administration”进入选项Projects即可创建Project;至此,TeamCity的安装说明已介绍完成。
]]>常用的gradle命令集锦:
$ gradle # 欢迎信息$ gradle [-v | --version] # 显示gradle相关版本及相关环境版本信息$ gradle eclipse # 构建eclipse项目开发环境(创建.classpash等文件)$ gradle tasks # 得到可运行的任务和描述的完整列表$ gradle <task> # 运行build.gradle中定义的任务$ gradle assemble # 编译程序源码打包生成jar文件,不执行单元测试$ gradle build # 编译程序源码打包生成jar文件,执行单元测试$ gradle compileJava # 编译程序中的源代码$ gradle clean # 清理项目构建文件(即就是build文件夹)$ gradle test # 编译$ gradle check # 代码质量检查
使用技巧:
。 maven项目秒转成gradle项目:
$ gradle setupBuild --type pom# gradle1.7的写法$ gradle init --type pom# gradle2.0的写法
。 设置gradle本地仓库路径:
设置环境变量即可: GRADLE_USER_HOME = dest-path(目标目录)
题图来源:gradle官方 https://gradle.org/
]]>参考程序分析:
public class TryCatchTest { @Test public void testMethod() { int i = method1(); System.out.println(i); } public int method1() { int a = 1; try { return ++a; } catch (Exception e) { e.printStackTrace(); } finally { ++a; } return a; }}
junit测试打印结果:2
分析:为什么打印的结果是2不是3呢?可以使用debug分析得出,在执行method1方法try中的++a
之后(a的值为2,同时将返回值2保存到局部变量中),程序并没有立即执行return,而是紧接着执行了finally的++a
(此时a的值为3),然后再执行try中的return(返回局部变量中的2);
若对程序进行改动,在finally中加入return分析返回值是多少?
public class TryCatchTest { @Test public void testMethod() { int i = method1(); System.out.println(i); } public int method1() { int a = 1; try { return ++a; } catch (Exception e) { e.printStackTrace(); } finally { return ++a; } }}
此时,junit测试打印结果为:3
分析:当程序执行到finally中的++a
(此时a的值为3),紧接着执行finally中的return;所以,try和finally中同时出现return时,try中的return将会失效;
题图来源:http://kuroeveryday.blogspot.jp/2014/12/Try-Catch-Finally.html
]]>nginx -?
到的帮助信息:nginx version: nginx/1.8.0Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /usr/local/nginx/) -c filename : set configuration file (default: conf/nginx.conf) -g directives : set global directives out of configuration file
]]>DAEMON=/usr/local/nginx/sbin/$NAME
语句,指定nginx的安装目录。新建nginx文件,添加内容(为方便显示对内容进行了缩进,你可以使用shift+tab来取消缩进至文件顶格):
#! /bin/bash# chkconfig: 35 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverseset -ePATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binDESC="nginx daemon"NAME=nginxDAEMON=/usr/local/nginx/sbin/$NAMESCRIPTNAME=/etc/init.d/$NAMEtest -x $DAEMON || exit 0d_start(){ $DAEMON || echo -n " already running"}d_stop() { $DAEMON -s quit || echo -n " not running"}d_reload() { $DAEMON -s reload || echo -n " counld not reload"}case "$1" instart) echo -n "Starting $DESC:$NAME" d_start echo ".";;stop) echo -n "Stopping $DESC:$NAME" d_stop echo ".";;reload) echo -n "Reloading $DESC configuration..." d_reload echo "reloaded.";;restart) echo -n "Restarting $DESC: $NAME" d_stop sleep 2 d_start echo ".";;*) echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2 exit 3;;esacexit 0
然后执行以下命令:
# 复制shell脚本nginx文件到目录/etc/rc.d/init.d/中cp ./nginx /etc/rc.d/init.d chmod +x /etc/rc.d/init.d/nginx # 设置文件可执行权限chkconfig --add nginx # 添加至系统服务
任何目录执行命令即可操作nginx:
service nginx <start | stop | restart | reload > # <启动|停止|重启|重载> nginx
]]>在你spring启动注解的配置文件中,进行如下配置:
<mvc:annotation-driven> <mvc:message-converters> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <value>WriteMapNullValue</value> <value>QuoteFieldNames</value> </list> </property> </bean> </mvc:message-converters></mvc:annotation-driven>
当然如果配置文件xml顶部声明版本为3.0或者spring版本为3.0都可能出现如下错误
Element 'mvc:annotation-driven' must have no character or element information item [children], because the type's content type is empty.
所以,尽量升级spring为当前文档的最新版本,将xml的声明修改为3.1及以上!
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
]]>