不久之前,我在这里看到了一个关于java包的细粒度组织的问题.例如,my.project.util,my.project.factory,my.project.service,等.
我现在找不到,所以我不妨问一下这个问题.
是否有关于Java程序包组织的最佳实践以及它们的内容?
如何在Java项目中组织课程?
例如,我正在与一些人合作的项目有一个名为beans的包.它最初是一个包含简单豆类的项目,但最终(通过糟糕的经验和缺乏时间)包含所有内容(几乎).我通过在工厂包中放置一些工厂类(使用创建bean的静态方法的类)来清理它们,但我们有其他类来执行业务逻辑,而其他类则执行简单处理(不使用业务逻辑),如检索来自属性文件的代码消息.
感谢您的想法和意见.
在你认为这是一个重复的问题之前,我相信我有一个独特的,即使它有点愚蠢的情况.
几天前,我将我的Ubuntu 10.04服务器上的MySQL版本升级到5.3.3(它超过了10.04的Ubuntu版本).今天,我尝试登录phpMyAdmin,发现了一些有些可怕的Connection for controluser as defined in your configuration failed错误.
在按照几个关于如何解决这个问题的SO问题的描述之后,我已经陷入困境.
flush privileges).granting access to database phpmyadmin for phpmyadmin@localhost: already exists
所以,这就是我留下的东西.我有一笔不能修改的补助金,也没有撤销:
mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in …Run Code Online (Sandbox Code Playgroud) 前段时间,我记得被告知不要在Java方法名称中使用数字.最近,我有一位同事问我为什么,为了我的生活,我记不起来了.
根据Sun(现在的Oracle),方法名称的一般命名约定是:
方法应该是动词,在第一个字母小写的大小写混合的情况下,每个内部单词的首字母大写.
这并没有具体说明数字不能使用,虽然有遗漏你可以看到它不被建议.
考虑一下您希望根据特定年度执行某些逻辑的情况(例如,一个在2011年生效的新政策),因此您的应用程序必须对信息采取行动并根据其年份对其进行处理.常识可以告诉你,你可以调用这个方法:
boolean isSessionPost2011(int id) {}
Run Code Online (Sandbox Code Playgroud)
是否可以在方法名称中使用数字(尽管标准的措辞)?如果没有,为什么?
编辑: "这并没有具体说明数字不能使用,虽然有遗漏你可以看到它不被建议." 也许我说错了.标准说'方法应该是动词'.我读到这个说,考虑一个数字不是一个动词,那么方法名称不应该使用数字.
将新版本的Grails 3.1.1应用程序战争部署到正在运行的Tomcat时,在部署后访问它时会出现异常.
Oct 13, 2016 11:39:58 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [grailsDispatcherServlet] in context with path [/acses] threw exception
java.lang.ClassCastException: org.grails.web.servlet.GrailsFlashScope cannot be cast to grails.web.mvc.FlashScope
at org.grails.web.servlet.DefaultGrailsApplicationAttributes.getFlashScope(DefaultGrailsApplicationAttributes.java:173)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:68)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
at org.springframework.boot.context.web.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:188)
at org.springframework.boot.context.web.ErrorPageFilter.handleException(ErrorPageFilter.java:171)
at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:135)
at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61) …Run Code Online (Sandbox Code Playgroud) 我们遇到了很多麻烦跟踪\ u2028(行分隔符)的用户提交的数据来源,使"未结束的字符串常量"错误在Firefox.
因此,我们希望在将其提交到服务器(然后是数据库)之前将其过滤掉.
经过广泛的谷歌搜索和阅读其他人的问题,很明显我必须在提交到数据库之前过滤掉这些字符.
在编写过滤器之前,我尝试搜索字符以确保它可以使用以下方法找到它:
var index = content.search("/\u2028/");
alert("Index: [" + index + "]");
Run Code Online (Sandbox Code Playgroud)
我每次都得到-1,即使我知道该字符在内容变量中(我已经通过服务器端的Java jUnit测试确认).
假设content.replace()会的工作方式与搜索相同的(),是不是我做错了什么的我失踪,以便找到并去掉这些行分隔符?
我有一个流程将日期从GMT转换为澳大利亚东部标准时间.为此,我需要从数据库中选择记录,处理它们然后再保存.
要选择记录,我有以下查询:
SELECT id,
user_id,
event_date,
event,
resource_id,
resource_name
FROM
(SELECT rowid id,
rownum r,
user_id,
event_date,
event,
resource_id,
resource_name
FROM user_activity
ORDER BY rowid)
WHERE r BETWEEN 0 AND 50000
Run Code Online (Sandbox Code Playgroud)
从总共大约中选择一个50000行的块.6000万行.我将它们分开是因为a)Java(写入更新过程的内容)耗尽了很多行的内存(每行都有一个bean对象)和b)我只有4 gig的Oracle临时空间可以播放用.
在这个过程中,我使用rowid来更新记录(所以我有一个唯一的值)和rownum来选择块.然后我在迭代中调用此查询,选择接下来的50000条记录,直到没有剩余(java程序控制它).
我得到的问题是,我仍然在使用此查询耗尽Oracle临时空间.我的DBA告诉我,不能授予更多临时空间,因此必须找到另一种方法.
我已经尝试用子视图替换子查询(我认为使用带排序的所有临时空间),但是使用视图的解释计划与原始查询之一相同.
是否有不同/更好的方法来实现这一点而不会遇到内存/温度空间问题?我假设更新查询更新日期(而不是java程序)会遇到使用临时空间可用的相同问题?
非常感谢您对此的帮助.
更新
我按照下面的建议走了pl/sql块的路径:
declare
cursor c is select event_date from user_activity for update;
begin
for t_row in c loop
update user_activity
set event_date = t_row.event_date + 10/24 where current of c;
commit;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
但是,我的撤消空间已经用完了.我的印象是,如果在每次更新后进行提交,则对撤消空间的需求很小.这个假设我不正确吗?
我在Oracle数据库中有一个表,其中包含我们其中一个系统中用户执行的操作.它用于统计分析,我需要显示给定日期执行的操作数,按一天中的小时分组.
我有一个查询可以做到这一点,但是,它不会显示一天中没有包含任何操作的小时数(显然因为那个小时没有要显示的记录).
例如,查询:
SELECT TO_CHAR(event_date, 'HH24') AS during_hour,
COUNT(*)
FROM user_activity
WHERE event_date BETWEEN to_date('15-JUN-2010 14:00:00', 'DD-MON-YYYY HH24:MI:SS')
AND to_date('16-JUN-2010 13:59:59', 'DD-MON-YYYY HH24:MI:SS')
AND event = 'user.login'
GROUP BY TO_CHAR(event_date, 'HH24')
ORDER BY during_hour;
Run Code Online (Sandbox Code Playgroud)
(不要注意奇怪的开始和结束日期,它们是这样的,因为它们是格林尼治标准时间,我是GMT + 10 - 但这是一个单独的问题,除非它影响回答这个问题的能力)
这会产生一个结果集:
DURING_HOUR COUNT(*)
---------------------- ----------------------
00 12
01 30
02 18
03 20
04 12
05 24
06 20
07 4
23 8
9 rows selected
Run Code Online (Sandbox Code Playgroud)
如何修改此查询以显示包含0个事件的当天小时数?
我搜索了Stack Overflow,发现了一些类似的问题,但不能回答我的具体问题.
非常感谢您的协助.