这个特别容易想,就是时间上很不能接受
我们知道对于26个字母的组合,那么每个字母要么选要么不选两种情况。
所以我们用一个int[26]的数组来代表一个组合。其中的值要么是0,要么是1.
那么就有2^26种组合,我们可以用十进制来计数,然后转换成二进制即,我们遍历2^26次,将所有的数转换成二进制并存储好就得到了字母表所有的组合,所以代码如下:
这个特别容易想,就是时间上很不能接受
我们知道对于26个字母的组合,那么每个字母要么选要么不选两种情况。
所以我们用一个int[26]的数组来代表一个组合。其中的值要么是0,要么是1.
那么就有2^26种组合,我们可以用十进制来计数,然后转换成二进制即,我们遍历2^26次,将所有的数转换成二进制并存储好就得到了字母表所有的组合,所以代码如下:
筛数法。。。不要问我证明了。。。我要好好想想
public static int[] findPrimenumber(int N){
int[] primeNums = new int[N+1];
for(int i=0;i
好吧。。我承认我当时准备不够充分。。所以咯。在这里记录下来吧。。。
首先我们看一下Java提供Split函数是怎么用的,
Here is the syntax of this method:
public String[] split(String regex, int limit) or public String[] split(String regex)
Here is the detail of parameters:
regex — the delimiting regular expression.
limit — the result threshold which means how many strings to be returned.
It returns the array of strings computed by splitting this string around matches of the given regular expression.
如果说,regex只是单一的符号当然容易解决了,那么考虑一下,这个符号不是单一的呢,而是char[]呢。
我们从字符匹配中借鉴思想来完成。
我们有两个字符串。
用BF的方式匹配,如果完全匹配成功则清空StringBuffer并将其放进一个ArrayList里面,否则一直匹配。
代码如下
事情是这样的,最近在工作中要编写一个在线聊天的工具,当然了,是基于Web开发的。
自然而然的调研到了一个Framework:Atmosphere(StackOverFlow的人各种强力推荐),然后我就下了来试试看。
当然了Demo是一点问题都没法,的确发现意外的好用,而且新版完全遵循J2EE的标准来完成的,包括新的J2EE的注解等等。
这时候自然而然的要移植到自己的软件时候就发现一个问题,死活没办法调用OnMessage的状态。虽然没有仔细阅读源码(我这个人太懒了。。要改,要改),最终还是找到了原因。
这个Framework具体实现上很多都是遵循了需要时注入的原则,具体而言就是当有信息Push到了Server时,因为某些POJO没有调用相应的注入,导致压根就无响应(虽然不理解为毛心跳包和握手包都正常。。。。这个设计者有点不统一)。那么很自然的想到了,这个是不是很像Spring的那种IOC呢?
那么这个Framework压根没有Spring这个组件的,但是Demo里面却能够正常的调用,仔细对比了一下,发现了这个META-INF,这个文件夹按照以前的说明是由编译器生成的METAINFORMATION<通常来说开发者是不需要关心的。但是为了在Servlet3.0以下的容器中使用IOC,在这里做了小小的Trick,写入了META-INF.services一个接口的信息,之前一直都没有注意这些信息导致调用一直失败。
所以这个Meta-INF.services是个什么东西呢:
为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。
当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。
基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。
具体再来看看我们这个程序中services里面到底写了什么:
其实就是实现了Injectable的接口。
再来看看Injectable具体在程序中是干嘛的,追踪进去:
啊哈,在Servlet初始化里面找到了踪迹。
所以呢这个函数是干什么的呢,主要干的和Spring自动装配是同一件事情。。。(为了满足标准的蛋疼。。。感觉Spring真像是个事实上的标准了。。)
所以为什么我们的Message没有发出去呢?
再来仔细观察ObjectInjectableMapper是干了什么:提供了注入的对象的限制。。。
最终,我们知道了。。其实导致不孕不育的原因,啊不。。发不出消息的原因是。。Jackson的MapperObject没有注入,导致编解码失败。。Message的注解其实是个回调函数,其中的Decoder是必须要的。。
因为ManagedSerivce是对整个Framework做的包装,所以想要使得Message的注解能够不用decoder都能生效就只能自己实现咯(当然懒鬼如我。。还是用着把,多方便呢)。
好了,自此都能说的通了。
https://github.com/michaelssss/MealControlSystem
采用Maven配置
本来没想干嘛的。。。就写着玩。。后来认真下去了发现是一个了解整个JavaWEB产生实施到上线的绝佳好机会
顺便来说说收获吧
关于Maven:
Maven是个好东西,集中仓储JAR管理,一键打包部署测试,搞持续集成的可以继续深入了解,采用约定大于配置的思想,只不过习惯了之后跳别的坑就要花时间转换以下思想。
WildFly
Jboss的后续版本,提供了完善的图形化界面,和以前需要写大量的xml相比,配置起来还是较为轻松的,就是内存本身的占用有点大。。谁叫这是支持EJB的东东呢。。。
慢慢的后续会在这个实验性的东西里面加上设计模式,持续集成,持续发布来玩~当然了,为了我的腹肌大业~本身的记录也是不能少的
https://github.com/michaelssss/DailyWritting
Python编写,编写了一个容器,该容器抽象上是一个list,list可容纳任何对象
Python编写,建立了一棵树,但是失败了(无法左右平衡)
赶火车,并没有编写
并没有编写
Python,快速排序算法
懒癌发作
学习了以下最短路径算法,能明白了,但是对图结构不了解,没有实现一次
Java,安全多线程编程的学习
2015年是我变动最激烈的一年把,三月四月份还在疯狂的准备着为了完成重修考试,一眨眼我都大学毕业了。
想想在成电的日子还真是舒服,每天除了准备考试,然后就是吃饭健身。当然了也就现在回忆起来很爽,当时为了毕业还真是痛苦,也怪自己水,各种划水,You will get what you paid。总的来说,教训就是不要总是幻想着奇迹发生,相反应该充分的做好准备奇迹也就变成了平常事了。
2015想做却没有认真做的在这就列个集合吧:
2015没做好的事情,没法子了,只能拖到2016来完成了:
以上计划坚持整个365天,每天在本blog打卡记录哟~一月一号开始执行~啦啦啦啦啦
噫~真弄成了个todolist了囧 ~
本文由 ImportNew – paddx 翻译自 javarevisited。
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。
由于我喜欢研究面试题,因此我已经收集了许多的面试问题,包括许多许多不同的主题。我已经为这众多的问题准备一段时间了,现在我将它们分享给你们。这里面不但包含经典的面试问题,如线程、集合、equals 和 hashcode、socket,而且还包含了 NIO、数组、字符串、Java 8 等主题。
该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。无论你是 1、2、3、4、5、6、7、8、9 还是 10 年经验的开发者,你都能在其中找到一些有趣的问题。这里包含了一些超级容易回答的问题,同时包含经验丰富的 Java 程序员也会棘手的问题。
当然你们也是非常幸运的,当今有许多好的书来帮助你准备 Java 面试,其中有一本我觉得特别有用和有趣的是 Markham 的 Java 程序面试揭秘(Java Programming Interview Exposed)。 这本书会告诉你一些 Java 和 JEE 面试中最重要的主题,即使你不是准备 Java 面试,也值得一读。
该问题列表特别长,我们有各个地方的问题,所以,答案必须要短小、简洁、干脆,不拖泥带水。因此,除了这一个段落,你只会听到问题与答案,再无其他内容,没有反馈,也没有评价。为此,我已经写好了一些博文,在这些文章中你可以找到我对某些问题的观点,如我为什么喜欢这个问题,这个问题的挑战是什么?期望从面试者那获取到什么样的答案?
这个列表有一点不同,我鼓励你采用类似的方式去分享问题和答案,这样容易温习。我希望这个列表对面试官和候选人都有很好的用处,面试官可以对这些问题上做一些改变以获取新奇和令人惊奇的元素,这对一次好的面试来说非常重要。而候选者,可以扩展和测试 Java 程序语言和平台关键领域的知识。2015 年,会更多的关注并发概念,JVM 内部,32 位 JVM 和 64 JVM的区别,单元测试及整洁的代码。我确信,如果你读过这个庞大的 Java 面试问题列表,无论是电话面试还是面对面的面试,你都能有很好的表现。
除了你看到的惊人的问题数量,我也尽量保证质量。我不止一次分享各个重要主题中的问题,也确保包含所谓的高级话题,这些话题很多程序员不喜欢准备或者直接放弃,因为他们的工作不会涉及到这些。Java NIO 和 JVM 底层就是最好的例子。你也可以将设计模式划分到这一类中,但是越来越多有经验的程序员了解 GOF 设计模式并应用这些模式。我也尽量在这个列表中包含 2015 年最新的面试问题,这些问题可能是来年关注的核心。为了给你一个大致的了解,下面列出这份 Java 面试问题列表包含的主题:
多线程,并发及线程基础
数据类型转换的基本原则
垃圾回收(GC)
Java 集合框架
数组
字符串
GOF 设计模式
SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)设计原则
抽象类与接口
Java 基础,如 equals 和 hashcode
泛型与枚举
Java IO 与 NIO
常用网络协议
Java 中的数据结构和算法
正则表达式
JVM 底层
Java 最佳实践
JDBC
Date, Time 与 Calendar
Java 处理 XML
JUnit
编程
vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅,在本教程当中就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令,而掌握好这些命令,您就能够很容易将vim当作一个通用的万能编辑器来使用了。
完成本教程的内容大约需要25-30分钟,取决于您训练的时间。
每一节的命令操作将会更改本文。推荐您复制本文的一个副本,然后在副本上进行训练(如果您是通过"vimtutor"来启动教程的,那么本文就已经是副本了)。
切记一点∶本教程的设计思路是在使用中进行学习的。也就是说,您需要通过执行命令来学习它们本身的正确用法。如果您只是阅读而不操作,那么您可能会很快遗忘这些命令的!
好了,现在请确定您的Shift-Lock(大小写锁定键)还没有按下,然后按键盘上的字母键 j 足够多的次数来移动光标,直到第一节的内容能够完全充满屏幕。
※※ 要移动光标,请依照说明分别按下 h、j、k、l 键。 ※※
^
k 提示∶ h 的键位于左边,每次按下就会向左移动。
< h l > l 的键位于右边,每次按下就会向右移动。
j j 键看起来很象一支尖端方向朝下的箭头。
v
1. 请随意在屏幕内移动光标,直至您觉得舒服为止。
2. 按下下行键(j),直到出现光标重复下行。
—> 现在您应该已经学会如何移动到下一讲吧。
3. 现在请使用下行键,将光标移动到第二讲。
提示∶如果您不敢确定您所按下的字母,请按下<ESC>键回到正常(Normal)模式。然后再次从键盘输入您想要的命令。
提示∶光标键应当也能正常工作的。但是使用hjkl键,在习惯之后您就能够快速地在屏幕内四处移动光标了。
其实还有更新的结论是,在新的MYSQL版本中BLOB字段并不是性能损失的原因。更具体的原因,下次将我理解的MYSQL索引的过程写下来
———————————-2015-11-19以上—————————————
最近公司项目中遇到了性能问题,是关于BLOB字段带来的性能损失。
首先在数据库中创建了这么两个表