Friday, February 24, 2017

Spring简介(二) -- AOP

Spring对比与Guice是稍微重量级框架。


Spring注解

详细见Java依赖注入标准

Spring AOP


AOP (Aspect-oriented programming)是面向侧面的程序设计,是植入横切关注点,对程序做某一点的关注,如关注一个方法的运行时间。
AspectJ采用编译期织入和类加载期织入的方式织入切面,是语言级的AOP实现。AspectJ利用反射的方法拦截方法,对方法调用前后计算时间来实现。



ref:
AspectJ

Mac快捷键

Mac Keyboard Win Keyboard(swap ctrl&command)
Control + Shift + Power Control + Alt + Scroll Lock 锁屏
Command+space Ctrl+Space 全局搜索Spot Search
Fn+Down Page Down 下一页
Fn+Delete Delete 删除游标后的字符





Ctrl+Space win+Space 切换输入法
Fn+F11 F11 显示桌面
Command+tab Ctrl+tab app切换
Command+win ctrl+win tab切换
Command+win+F ctrl+win+F 全屏/退出全屏
Command+M ctrl+M 最小化窗口
win+mouse scroll 放大word
Command+Plus ctrl+Plus 放大Chrome
command+shift+4 ctrl+shift+4 截屏
command+shift+r/shift
reload button

hard refresh无cache的加载
⌘command
⌥option
⇧shift
⇥tab
⌃control
命令行
Ctrl+R win+R 搜索历史命令
Ctrl+A win+A 游标回到头
Ctrl+b
上一页
Ctril+f
下一页
Ctril+d
删除改行
shift+g shift+g 打开的文件跳到末尾
shift+z+z shift+z+z vim保存且退出(=:wq)
shift+z+q shift+z+q vim不保存且退出(=:q)
dd vim删除一行(非插入状态)
p vim复制刚才dd剪切的一行(非插入状态)
IntelliJ
command+O Ctrl+O 查找文件
command+alt+右箭头 ctrl+alt+右箭头 后一步Navigate forward
command+alt+左箭头 ctrl+alt+左箭头 前一步Navigate backward
option+回车 加入import解决symbol

Wednesday, February 22, 2017

Linux常用命令

grep是查找某个关键字或正则表达式在某个文件某一行的匹配,结果为匹配的及文件

返回含abc的匹配行:
zgrep "abc" application.log

在多个文件中查找:*.txt或者{}.txt
grep 'linux' {a,b}.txt

先返回含Exception的匹配行再返回含Hulu的匹配行,也就是同时含这两次的匹配行:
zgrep "Exception" */application*.log | grep "Hulu" 在application log中含Exception以及Hulu

按文件统计出现行数 -c
grep -c 'linux' *.txt

统计全部文件总行数=次数:
zgrep "Exception" */application*.log | grep "Hulu" | wc -l 数出现次数

关键词也可以为正则表达式:
vim中 /main 搜索main关键字,可以带正则表达式:如Time=[\d]{4,4}\.[\d]* ms
   按键盘n表示下一个搜索结果,按键盘N表示上一个搜索结果。
grep也可以带正则表达式:grep -c 'Time=[\d]{4,4}\.[\d]* ms' *service
grep 'linux\|win' a.txt

grep -c 'Time=[\d]{4,4}\.[\d]* ms' *service| sort | uniq -c | sort -rn |head 按文件统计词频且按大到小排序

grep是行匹配,而awk是词匹配(按空格)
打印所有行的第一个词(默认按空格划分),其他词不输出
awk '{print $1}' a.txt

自定义分隔符,如逗号
awk -F',' 'print $2' a.txt

排序
sort -r 递降排序结果
sort -u 去重且排序

进程操作
netstat -tupln | grep 1066得到要终结进程的id
kill -9 16085删除进程by id
ps aux | grep 1066查看谁在用1066端口
查找操作
grep -color=auto "the" foo.txt[文件内容]在某一个文件查找某字符串并打印结果行
-i 大小写敏感
-A 打印后几行
-B 前几行
-C 周围几行
-P 匹配正则表达式 "url=.*?;" 问号表示分号不加入匹配结果
-o 只显示匹配string
-c 匹配结果行数 或|wc -l
-v 不含某字符串
-n 显示行号
grep -r "the" * 递归在所有文件中查找某字符串
grep -A 3 -i "moon" foo.txt 在某一个文件查找一个字符串并打印紧接的3行
  | head 查看前10行
  | sed "s/my/your/" 替换(用your替my)
find . -iname "odin-get"[文件名]搜索文件名通过名字
find ./Test -user kk 搜索文件名通过用户
文件操作
less foo.txt高效率打开大文件。CTRL+F下一页,CTRL+B上一页. SHIFT+G文件底部
cat > foo.txt创建文件。CTRL+D保存文件
cat foo.txt查看文件
vim foo.txt创建/编辑一个文件
/main 搜索main关键字
i/insert 插入模式,ESC退出插入模式
:q 或者Ctrl+z+q不保存退出
:wq 保存退出
rm foo.txt删除文件
mv -i foo.txt Test/foo.txt移动/重命名文件
cp -i foo.txt Test/foo.txt复制一个文件
scp ~/a.txt jiajicen@vtasters.com:~/a.txt复制一个文件到另一个host
scp -r jiajicen@vtasters.com:~/test ~/test复制一个文件夹到另一个host. test文件夹不需要预先创建
tail -f app.log即时打印最新的log,方便同步debug
目录操作
cd ../root/Docements 绝对路径
./path 当前目录
../path 父目录
~/Desktop 根目录/Users/kk/Desktop
~john/bin 用户目录/Users/john/bin
ls -ltr-ltr 按时间排序
-lh 显示大小权限
-alh 显示隐藏文件
pwd显示当前目录
mkdir Test创建目录
rm -r Test删除目录
环境变量
export PATH="/home/Application/Java/bin:$PATH"加入环境变量到内存,然后执行source加入到硬盘再重启命令行。
一次性操作为export PATH=$PATH:/home/Application/Java/bin >> ~/.bash_profile
source ~/.bash_profile (Mac)加入到硬盘。Linux为~/.zshrc
echo $HOME打印某环境变量
which java得到某个命令如java路径,也是查找在~/.zshrc此命令的路径
系统操作
clear清屏
sudo reboot重启
sh abc.sh执行一个程序,可能需要先提高权限chmod +x abc.sh
有时需要加点如./mvn才能执行,通过加入到.bash_profile可以避免
su Javasu=sudo, 用超级用户执行程序。
ssh vtasters.com远程登录
nslookup通过IP查找其hostname


agrep 文件每个block以EOF结束,agrep可以block查找


zshrc文件:
~/.zshrc
alias vm01="ssh ubuntu@172.31.29.246"

然后
echo "alias vps='ssh -X user@example.com'" >> ~/. zshrc
source ~/.zshrc
就可以输入vm01登录

Linux文件权限:
Linux权限为读写执行r, w, x.
Linux权限粒度为拥有者u,群组g,其他组o。
4,2,1表示读、写、执行权限。rwx=4+2+1=7, rw=4+2=6, rx=4+1=5

chmod 777 file.txt (<=> chmod u=rwx, g=rwx, o=rwx)
chmod 600 file.txt (<=> chmod u=rw, g=---, o=---)

查看字符
先copy到这个网站得到它的ascii码
然后查找

ssh问题
尝试ssh到某个host得到此错误Could not resolve host name但可以ping
尝试用ssh <host> -o ProxyCommand=none

Sunday, February 19, 2017

AWS目录

CloudTrail(AWS console user/API activities)
Athena
AWS KMS

Api gateway

产品 简介 类别 竞争者 用例
ElastiCache Cache Cache Redis/Memcached
DynamoDB NoSQL database 数据库 mongodb
Elasticsearch 多文档全文搜索 搜索 Lucene Github, StackOverflow, HotelTonight, Wiki
S3 File store 文件存储 Disk/FTP
Lambda 事件驱动构件,无编程环境只与语言相关的EC2 serverless Webtask Alexa skill,微服务
Kinesis 实时发布者-订阅者系统 系统 Apache Kafka 股票实时统计
LinkedIn: 用户消息通知
游戏: 交易通知或预警
SQS 非实时处理任务系统,将同步变异步解耦削峰 系统 ActiveMQ 订单放入队列中
RDS 关系型数据库包括MySQL, MSSQL, Oracle等 数据库 各类数据库供应商
CloudWatch server运维数据和警报 运维 Nagios
CloudTrail AWS资源的变化和API数据 运维
CloudFormation 用json来描述AWS资源及其重要设置 运维
Pipeline 代码部署 运维
CloudFront CDN service 系统
EMR 基于Hadoop来做数据计算的平台 系统
SES 电子邮件平台 邮件
AppSync 用于手机,网站的实时data sync服务 系统
Mobile Analytics 收集手机用量 系统
Athena SQL分析服务 分析
Amplify 类似于Google Analytics分析,网站的点击数,时间等 系统


ElastiCache(=Cache),DynamoDB(=数据库),S3(=文件存储)。Cache最快当然也最贵,数据库可以建index,所以也比较快,价格比Cache稍便宜,而S3最慢也最便宜。

Saturday, February 4, 2017

Alexa Skill例子


所有skill都继承Speechlet,onIntent处理每种intent,session是每次完整对话的内容。

public class ScoreKeeperSpeechlet implements Speechlet {
    @Override
    public SpeechletResponse onLaunch(final LaunchRequest request, final Session session)
            throws SpeechletException {

    }

    @Override
    public SpeechletResponse onIntent(IntentRequest request, Session session)
            throws SpeechletException {
        Intent intent = request.getIntent();
        if ("NewGameIntent".equals(intent.getName())) {

        } else if ("AddPlayerIntent".equals(intent.getName())) {

        }
    }

    @Override
    public void onSessionStarted(final SessionStartedRequest request, final Session session)
            throws SpeechletException {

    }

    @Override
    public void onSessionEnded(final SessionEndedRequest request, final Session session)
    }

}

ref:
https://github.com/amzn/alexa-skills-kit-java
这里链接有很多例子