Browse Category

JAVA

netty学习笔记

1.对比学习

ionionetty
数据载体直接从io流中读取Buffer Buffer
链接(io)模型java io模型channel channel
线程模型一个连接占用一个线程多个链接由一个线程进行处理
多个链接由一个线程进行处理
新连接处理方式监听有新请求,到达后占用一个线程处理数据请求,同步处理读写监听新请求和读取数据分离,异步读写数据

监听新请求和读取数据分离,异步读写数据
优点freehardbeautiful
缺点浪费性能难以上手,不好维护,有bug不告诉你
特性自己玩懒得说1.一个请求(channel)可以交给一个
pipeline 链路 进行流水线式的业务处理,流水线的每个节点都是一个
channelHandler ,
channelHandler 是用于做数据读写的具体代码,重写相应的方法即可,而且netty帮我们实现了很多开箱即用的handler,让我们可以轻松地进行,粘包拆包,编解码,心跳检测等等。2.在chanel中数据是封装成
Buffer 来进行传递的,Buffer就可以理解为一个很好用的包装,提供各种爽到爆炸的api

2.总结

1.Socket编程中的链接是各种inputstream ,netty中对应的是channnel,

2.Socket编程中数据是从各种inputstream 中直接读取的,netty中是封装成Buffer然后从buffer中进行读取的。buffer提供了各种api

3.netty为了让我们对一次请求的数据可以更优雅的进行各种加工,设计了
类似流水线 的pipeline链路让我们可以对一次请求进行多次加工处理。每次加工处理交给一个 channelHandler来处理。 channelHandler 对应流水线中的各个加工节点

4. channelHandler 中我们只需要重写接口中的相应方法,通过方法入参即可拿到我们想要的请求对象( channel )和数据对象(Buffer)

Failed to resolve directive: link

Failed to resolve directive: link的原因是vue route 2.0取消了v-link写法。最新的写法是

<router-link to="/goods">商品</router-link>

ie浏览器提交两次的导致的问题

问题:网站在谷歌火狐等浏览器可正常登陆,但是在ie浏览器登陆总是会失败

问题跟踪:通过后台捕捉浏览器请求,发现ie和其他浏览器相比登陆请求发送了两次。于是猜测是ie表单提交两次导致的问题。

问题原因:ie部分浏览器通过js提交form的时候写法必须严格。

问题解决:1.在form元素中给提交按钮input元素加上type=”submit”。2.js提交方法结尾出加上return false;

git常用命令总结

使安装完成之后。
命令1:标示本机全局用户名和邮箱。在某个目录下创建git仓库
$ git config –global user.name “Your Name” $ git config –global user.email “email@example.com”
git init
命令2:把本地改动添加到git暂存库
git add “filename”
命令3:把暂存区的改动提交到当前分支
git commit -m “提交内容的描述”
扩展如何不写描述
命令4:查看当前仓库状态
git status
命令5:查看当前文件改动比较对象是最后一次add或者commit
git diff
命令6:查看提交历史后面参数是简化版
$ git log –pretty=oneline
按q退出
命令7:版本回退,参数^个数代表回退到之前多少版本,COMMITID为提交版本id
$ git reset –hard HEAD^
$ git reset –hard COMMITID
命令8:命令操作历史
git reflog
命令9:撤销本地修改。会撤销到想一次add或者上一次commit。注意–前后都有空格
git checkout — readme.txt
命令10:撤销缓存区内容。将该文件缓存区内容清空
git reset HEAD file
命令11:删除文件
$ git rm test.txt $ git commit -m “删除文件”
扩展如果远程仓库被删除了如何恢复,需要注意什么
命令12:创建ssh key
$ ssh-keygen -t rsa -C “youremail@example.com”
命令13:关联远程仓库origin是远程仓库名字。可以自定义多个远程库
git remote add origin git@server-name:path/repo-name.git
命令14:将主分支推送到远程仓库 -u意思是推送的同时将主分支和远程仓库的主分支进行关联。其中origin是远程仓库的名字
$ git push -u origin master
$ git push origin master master为指定的本地分支
命令15:从远程库下载
$ git clone git@github.com:michaelliao/gitskills.git
命令16:创建分支-b表示创建并且切换
$ git checkout -b dev=$ git branch dev $ git checkout dev
命令17:查看所有分支
$ git branch
命令18:合并某分支到当前分支
$ git merge otherbranch
命令19:删除分支
$ git branch -d branchname
命令20:查看分支图
$ git log –graph –pretty=oneline –abbrev-commit
冲突解决流程。git merge之后手动处理文件然后再次add commit即可
命令21:禁用快速合并模式–no-ff
$ git merge –no-ff -m “merge with no-ff” dev
命令22 :暂存工作空间的改动和恢复
$ git stash暂存
$ git stash pop 恢复并删除当前缓存
$ git stash apply 恢复某个默认第一个
$ git stash dorp删除
$ git stash list 缓存列表
命令23:强制删除某个废弃分支
$ git bransh -D branchname
命令24:查看远程库信息
$ git remote简略信息
$ git remote -v详细信息
命令25:给commit打标记
$ git tag tagname给当前最新的commit打标记
$ git tag查看所有标记
$ git tag tagname commitid给某个commit打标记
$ git log –pretty=oneline –abbrev-commit查看历史commit版本
$ git show tagname 查看当前标记详情
git tag -a <tagname> -m “blablabla…”对标记进行描述方式创建
命令26:标签删除和标签推送
$ git tag -s tagname
$ git push origin tagname推送某个
$ git push origin –tags推送所有
远程删除
先删除本地git tag -d tagname
git push origin :refs/tags/tagname
命令27:使git窗口显示颜色
$ git config –global color.ui true
命令28:配置命令别名st为别名也就是说alias是别名前缀
$ git config –global alias.st status
拓展知识设置忽略
通过编写.gitignore文件进行配置
好看的log输出log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit
# 删除 untracked files
git clean -f

# 连 untracked 的目录也一起删掉
git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd

# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf

用远程覆盖本地
git fetch --all
git reset --hard origin/master

iframe无法自适应高度问题

在给iframe的onload方法对iframe进行自适应高度时,遇到不能正常适应的情况,页面总是保持最大的高度。其后的页面不管多小,都保持最大的高度,页面底部会有大片空白。用户体验很不好。找了网上很多代码都未曾有效适应。后来经过测试发现iframe每次加载新的url如果高度足够内容展示,容器的高度就不会改变。解决方法是在iframe加载新页面之前手动将iframe的高度设置为一个最小值,但是不要设置为0,因为为0用户体验不好,页面会特别闪眼。预先设置好高度后再次加载时候就会重新按照新的高度进行撑开了。具体怎么自适应就自行百度吧

ORA-00911: 无效字符问题和解决

当捕捉到这个异常ORA-00911,后首先相当的是把sql放到sqlplus等软件中测试一下,结果发现在那边是可以执行的,而且没有报错。

然后再回去看sql因为sql太长不太好找具体哪里有无效字符,而且报错定位不明显。这个时候一般情况是sql中有分号导致的。如果你的sql结尾处没有分号,那么hibernate执行的异常中一般是会告诉哪个字符是非法字符的。只有这一种情况最恶心,异常太不明显了。不知道的人要想一个个排查查半天都查不出所以然。

下拉框多选功能实现

这里要介绍的是一个开源插件multiple-select  github地址为https://github.com/wenzhixin/multiple-select    插件提供 的 文档本身就很全面,而且一般的主流浏览器都能够支持。

依赖的js有  jquery,bootstrap,multiple-select ;css有bootstrap,multiple-select

使用方法:给select元素设置multiple=”multiple”属性。然后通过$(‘#id’).multipleSelect();对改元素进行渲染即可;为了更能适应中文使用环境可以把js中的部分英文状态改成中文,比如全选的状态等等。可以通过全局搜索定位到相应的位置进行修改。该插件的效果很简洁大方,在我看来是比较美观的。

树形选择框实现

找了很久关于树形选择框的插件。大部分都是ztree来自己实现,虽然能用但是对代码侵入性太高,往往实现一个功能要写大量js,终于在网上被我找到了一个侵入比较低的实现方式,原博客地址为URL。但是呢大神实现后由于时间比较久只有js没有css。我重新给加了css做实现,并且对js做了调整,但是和原效果图还是有区别的,因为重在功能实现,样式大家可以自己参照我写的,做自己对应的调整即可。js下载地址 css下载地址

插件依赖:jquery,ztree

使用方法为:

<input id="simple-select" name="test" />
注册一个input框来进行绑定下拉框只需要一个id即可渲染。name是你自己最终的表单项名称
$(function(){
  var data={items: ${testArray}
  $("#simple-select").drawTree(data);
}
没错就这么简单。超低的侵入性。其中${testArray}为json数组,格式为[  {code:'root',name:'根节点',pid:-1}, 
    {code:'node',name:'二级节点',pid:'root'} ]
可以从后台获取。ajax获取或者直接从作用域中获取都行。

可用的国内maven库镜像

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

使用wsdl2java工具生成天气预报客户端

1.环境和工具的准备。java环境阿帕奇cxf工具这两个身为开发的你肯定都有

2.在doc窗口找到阿帕奇cxf工具的bin目录。执行wsdl2java -frontend jaxws21 -d  代码生成路径 空格 wsdl文件地址 例如wsdl2java -frontend jaxws21 -d  C:\Users\jason\workspace\weatherReport\src e:\\WeatherWebService.wsdl生成的时候你会发现如果后面的wsdl地址你使用http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl来生成的时候会报错:undefined element declaration ‘s:schema’这是因为java中不支持这种写法。有的人说是因为这个wsdl服务器是.net的所以有不兼容的情况。算得上是一个bug吧。解决办法是将wsdl保存到本地,然后将所有的这种写法的标签删除或者用等价值替代。这样就可以生成了。

3.生成之后代码的使用

可以直接声明一个WeatherWebService 类来调用服务器端的方法获取天气。例如

WeatherWebService wws=new WeatherWebService();
ArrayOfString wwsr=wws.getWeatherWebServiceSoap().getWeatherbyCityName(“城市名称”);

当然里面不止这一种方法。你可以自己再研究

4.补充,如果到这里你出现No namespace on “html” element. You must send a SOAP request.的情况的话那么。很可能是你项目中引入了cxf的某些jar包导致的冲突的情况。具体什么类的冲突我还需要再进行研究。如果你出现了。可以删除引用的jar包即可解决。