发表于: 2016-09-09 22:23:07

2 2299


今天完成的事情:原定于今天学习swagger的计划推迟了,上午笔记本主板烧了,去找售后返厂了,得到的教训是上船一定要从京东买,不然本地没有官方售后的话,还要自己返厂,在京东买,京东给你售后。你自己操心会少点。

明天计划的事情:明天10点上班,晚上聚餐,把今天的问题解决了,学习下swagger。我在网上看到除了swagger以外,还有prmd、apidocjs等工具,还有人自己写类似的工具,都好厉害。在这里必须要提一下,我是看了老大

 【对于互联网的码农新人来讲,有机会跟项目的话,会遇到哪些问题,能从项目中学到哪些知识?】IT修真院-xdyl:题外话: 在修真院的线下,一年多的时间… http://www.zhihu.com/question/49646794/answer/117059246 (分享自知乎网) 

这个帖子才知道原来有那么多东西,才知道写接口要干那么多事情。我一开始以为写好了他们调用就行了。。。。。


遇到的问题:

今天因为换了电脑,每次配环境变量只是配完就拉到,这次算是了解下配置环境变量到底有啥作用。


1.

 PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的

命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,

设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

2. 

CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的。

我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。

3. 

JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

4.

eclipse启动报错1如下http://jingyan.baidu.com/article/25648fc1bcbda39191fd00b0.html

java was start。。。。。,将java 8 update 卸载后就可以使用了,

但是我这里报第二个启动错误failed to load the 。。。 jvm.dll确认环境变量没有错误,

原因是我装的jdk不是64位,下载一个64位jdk和jre就可以,当然在官网下载让你选择Accept License Agreement还是Decline License Agreement

默认是后者,如果不改成accept的话不能下载,因为必须同意许可协议啊

5.

项目组决定短信验证码验证功能要求后台处理(为什么懒病犯了,感觉app存到本地不是很好嘛)


一开始的思路是声明一个静态map,把手机号当键,把验证码当值,

后来领导要求10min后清理掉存储的单条验证码,

想到了使用map<String,object>,接着网上搜的时候找到了缓存池

但是发现操作object很麻烦,从网上找到思路,将手机号+验证码作为键,将创建时间作为值,然后跑一个定时脚步,每隔10分钟删除过期的数据。

这个未完待续,缓存池使用object作为value的

6.

No mapping found for HTTP request with URI [/CodeTest/code/getcode] in DispatcherServlet with name 'mvc-dispatcher'

不知道这个地址访问哪里。要不就是地址错误,要不就是controller没有扫描到,我发现自己玩了改配置文件了。

7.

long类型进行加减的问题,直接使用符号就可以了,结果必须用long或者Long接受

8.

单例模式

因为5的业务需要,缓冲池必须使用单例设计模式,最基本的单例模式分为饿汉模式和懒汉模式,


饿汉模式天生线程同步,懒汉模式则需要考虑线程同步问题,


饿汉模式是先实例化再用静态的get方法获取对象,因为对象已经实例化了,所以不存在线程同步问题,

懒汉模式是先判断是否为空在看情况实例化对象或者返回已经实例化的值,因为线程安全问题必须要使用synchronized关键字,为了效率问题可以使用

双重校验锁的方式。


上面是基本实现方法,我还看到使用枚举和静态内部类的方式

这是原贴地址http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html

9.

使用tomcat不同端口或者相同端口部署多个项目

http://blog.csdn.net/philosophyatmath/article/details/30246631

最后没有成功,将这个先放放等有空实验

10.

遍历map问题

思路应该是先获得所有的key的集合,然后遍历key取出value,

接着在百度的时候发现可以用map自带的内部类entry的,这个是基础内容

http://www.cnblogs.com/kristain/articles/2033566.html

11.

使用spring 制作定时任务,这个是接上面问题5的。

http://gong1208.iteye.com/blog/1773177,

这篇blog入门很好,总结的很清楚,也有例子,但是怎么定义时间要好好实验下

这里要注意在springMvc中启用了注解扫描后并不能对Spring中的配置定时任务的配置起作用,所以要在spring中也要启用注解,我在网上看了一下,

有人解释,spring是springmvc的上级,这是我查找到的回答http://www.oschina.net/question/96254_140295

有人说:spring mvc就是子上下文,在启动的时候它会把 application context做为父上下文,源码里面有,如果只有一个子上下文那没关系了,怎么整看你了。

这个需要自己好好

12.

eclipse中的项目名上有红叉,但是里面的文件没有任何问题

打开 problems窗口,那里会有这个project的错误位置,如果错误发生在配置上,在文件里是没有红叉的。

13.

这是我自己写的验证码是否过期的方法,结果报这个错误,等明天好好研究下

定时任务进行中。。。16090951

[ERROR] 2016-09-09 20:51:00,006 method:org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler.handleError

(TaskUtils.java:95)

Unexpected error occurred in scheduled task.

java.util.ConcurrentModificationException

at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)

at java.util.HashMap$KeyIterator.next(HashMap.java:1453)

at org.test.code.CachePool.removeExpire(CachePool.java:104)

at org.test.test.TaskJob.job1(TaskJob.java:23)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)

at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)

at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

自己写得定时删除过期数据的方法报错了



返回列表 返回列表
评论

    分享到