我不确定我是否可以提出这样的问题,但在Meta Stackoverflow上看到这个后,看起来这种问题还可以.那么,关于我的问题:
几个月前,我在Javascript中编写了一个验证框架.我知道已存在jQuery Validation之类的验证框架,但我想采用不同的验证方法.当前的方法涉及编写Javascript代码以对表单元素执行验证.通过查看表单源代码,不会立即明确在每个元素上进行验证.在某种程度上,这可以通过使用指定不同类型的验证的CSS类来解决.但我觉得即使这样也是有限的,因为你无法轻松定制验证的行为(错误消息等).我想使用JSR-303 Bean Validation或Hibernate Validator在Java中执行基于注释的验证.
由于HTML5允许您向元素添加自定义属性,我认为我可以利用它来"注释"表单元素以进行验证.所以,基本上,我想出了这个:
<input id = "myInput"
name = "myInput"
type = "text"
class = "regula-validation"
data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' />
Run Code Online (Sandbox Code Playgroud)
考虑到这个基本思想,我创建了一个Javascript框架:
此外,该框架还具有以下功能:
一旦我创建了我的框架,我就试图获得反馈并对其进行审核,但我不知道该去哪里获得反馈和评论.我写了一些关于它的博客文章并将其发布到Digg和Reddit(编程部分),但没有太多运气.一些人似乎很感兴趣,但我没有得到更多.
Recently, at my workplace we've been modernizing a legacy codebase (JSP and servlets) and moving it into Spring MVC. When the conversation of validation came up, I pitched my framework to my senior …
使用中间方法生成一系列(伪)随机数的字符数最短的代码.
约翰冯·诺伊曼于1946年首次提出了(伪)随机数生成的中间方法,其定义如下:
R n + 1 = mid((R n)2,m)
例如:
3456 2 = 11943936
mid(11943936)= 9439
9439 2 = 89094721
mid(89094721)= 0947
947 2 = 896809
mid(896809)= 9680
9680 2 = 93702400
mid(93702400)= 7024
另一个例子:
843 2 = 710649
mid(710649)= 106
106 2 = 11236
mid(11236)= 123
123 2 = 15129
mid(15129)= 512
512 2 = 262144
mid(262144)= 621
621 2 = 385641
mid(385641)= 856
856 2 = 732736
mid(732736)= 327
327 …
有谁知道我在哪里可以找到Spring的(3.0.x)运行时异常列表?我说的是例外DataRetrievalFailureException; 你可以抛出一整套这些运行时异常.
我正在通过使用随机梯度下降的反向传播训练XOR神经网络.将神经网络的权重初始化为-0.5和0.5之间的随机值.神经网络在80%的时间内成功训练自己.然而有时它会在反向传播时"卡住".通过"卡住",我的意思是我开始看到纠错率下降.例如,在成功培训期间,总误差会随着网络的学习而迅速下降,如下所示:
...
...
Total error for this training set: 0.0010008071327708653
Total error for this training set: 0.001000750550254843
Total error for this training set: 0.001000693973929822
Total error for this training set: 0.0010006374037948094
Total error for this training set: 0.0010005808398488103
Total error for this training set: 0.0010005242820908169
Total error for this training set: 0.0010004677305198344
Total error for this training set: 0.0010004111851348654
Total error for this training set: 0.0010003546459349181
Total error for this training set: 0.0010002981129189812
Total error for this training set: 0.0010002415860860656 …Run Code Online (Sandbox Code Playgroud) 例如,Level 3 RESTful API具有自定义媒体类型application/vnd.service.entity.v1+json.在我的情况下,我使用HAL来提供我的JSON中相关资源之间的链接.
我不清楚使用HAL + JSON的自定义媒体类型的正确格式.我现在的样子,看起来像application/vnd.service.entity.v1.hal+json.我最初使用application/vnd.service.entity.v1+hal+json,但+hal后缀未注册,因此违反了RFC6838的4.2.8节.
现在Spring HATEOAS支持开箱即用的JSON链接,但对于HAL-JSON,你需要使用@EnableHypermediaSupport(type=EnableHypermediaSupport.HypermediaType.HAL).在我的例子中,因为我使用Spring Boot,所以我将它附加到我的初始化类(即扩展的类SpringBootServletInitializer).但Spring Boot无法识别我的自定义媒体类型.所以为此,我必须弄清楚如何让它知道它需要使用HAL对象映射器来处理表单的媒体类型application/vnd.service.entity.v1.hal+json.
对于我的第一次尝试,我将以下内容添加到Spring Boot初始化程序中:
@Bean
public HttpMessageConverters customConverters() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(
new MediaType("application", "json", Charset.defaultCharset()),
new MediaType("application", "*+json", Charset.defaultCharset()),
new MediaType("application", "hal+json"),
new MediaType("application", "*hal+json")
));
CurieProvider curieProvider = getCurieProvider(beanFactory);
RelProvider relProvider = beanFactory.getBean(DELEGATING_REL_PROVIDER_BEAN_NAME, RelProvider.class);
ObjectMapper halObjectMapper = beanFactory.getBean(HAL_OBJECT_MAPPER_BEAN_NAME, ObjectMapper.class);
halObjectMapper.registerModule(new Jackson2HalModule());
halObjectMapper.setHandlerInstantiator(new Jackson2HalModule.HalHandlerInstantiator(relProvider, curieProvider));
converter.setObjectMapper(halObjectMapper);
return new HttpMessageConverters(converter); …Run Code Online (Sandbox Code Playgroud) 这是一个简单的示例,演示了我遇到的与类型擦除相关的问题.我有一个这样的课:
public abstract class AbstractHandler<T> {
...
public abstract Class<T> handledType();
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个实现:
public class ConcreteHandler extends AbstractHandler<Map<String, List<Thing>>> {
@Override
public Class<Map<String, List<Thing>>> handledType() {
//what do I return here?!
}
}
Run Code Online (Sandbox Code Playgroud)
我不能回来Map<String, List<Thing>>.class,因为那在语法上甚至都没有.我尝试在子类型中创建泛型类型参数HashMap<String, List<Thing>>然后返回new HashMap<String, List<Thing>>().getClass(),但这不起作用,因为返回类型Class<T>#getClass()是Class<? extends T>.我TypeToken从Guava 看了一下,这个getRawType方法似乎很有希望,但它又回来了Class<? super T>.
我现在有一个解决方法,看起来像这样:
public class ThingListMap {
private Map<String, List<Thing>> thingListMap;
...
}
Run Code Online (Sandbox Code Playgroud)
我只是ThingListMap用作泛型类型参数.
另一种可能的解决方法是执行强制转换:
public Class<Map<String, List<Thing>>> handledType() {
return …Run Code Online (Sandbox Code Playgroud) 这个例子有点人为; 我简化了它以删除无关的细节,并专注于我遇到的问题.我有一个看起来像这样的验证器:
@Component
public class UniqueUsernameValidator implements ConstraintValidator<UniqueUsername, String> {
@Autowired
UsernameService usernameService;
@Override
public void initialize(UniqueUsername uniqueUsername) {
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
return !usernameService.exists(s);
}
}
Run Code Online (Sandbox Code Playgroud)
我从我的控制器调用验证器,如下所示:
@RequestMapping
public void checkUsername(Model model, User user) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> constraintViolations = validator.validateProperty(user, "username");
model.addAttribute("error", constraintViolations.size() > 0);
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直有NullPointerException例外.我在验证器添加一个断点,并看到usernameService了null.为什么不进行自动装配?最初我认为这是因为我没有注释验证器@Component,但即使在注释它之后我仍然有同样的问题.该UsernameService班已经标注了@Service,我可以验证它的构造函数获取调用.
我是Spring的新手,所以我甚至不确定将服务连接到验证器是否可以.我究竟做错了什么?
我前段时间编写了一个测试,用于测试我在代码和第三方API之间编写的集成.测试确保集成正常工作,并确保我们得到预期的结果.
正式版本今天失败,因为测试在尝试连接到第三方API时收到500错误.
测试这样的情况是否有意义?
testing continuous-integration integration-testing automated-tests regression-testing
是否有工具可以分析Maven构建过程本身,以便我可以看到构建花费最多时间的位置?
我们在Maven 3.0.3和3.0b1方面遇到了问题.与3.0.3(9m00s)相比,我们的项目在3.0b1(3m30s)下构建得更快.使用3.0b1,构建速度提高约63%(如果我的数学运算正确).
我尝试搜索有关Maven 3的性能比较和性能问题,但无法找到任何内容.
UPDATE
我通过查看maven来源做了一些研究,这是我发现的:
使用jconsole时,我发现大部分时间(在3.0.3中)花在内部DefaultProjectDependenciesResolver.java.所以我将源代码下载到3.0b1和3.0.3以查看发生了什么.我注意到在3.0.3中有两个版本的类.一个在org.apache.maven.project,而另一个在org.apache.maven.在3.0.3中,似乎也使用了前者.在单步执行代码时,我看到大部分时间都花在了这个语句上:
node = repoSystem.collectDependencies( session, collect ).getRoot();
Run Code Online (Sandbox Code Playgroud)
在3.0b1中,代码执行:
ArtifactResolutionResult result = repositorySystem.resolve( request );
Run Code Online (Sandbox Code Playgroud)
我也注意到它respositorySystem的类型RepositorySystem,具体实现是LegacyRepositorySystem.我假设在Maven 3处于测试版之前使用它直到创建新实现?回到3.0.3,该collectDependencies方法DefaultRepositorySystem.java属于其中的一部分org.sonatype.aether.impl.internal.这最终调用collectDependencies内部DefaultDependencyCollector.java也是其中的一部分org.sonatype.aether.impl.internal.我假设这是依赖图的构建方式.
我现在想知道这是因为我们的依赖关系是如何构建的.以前有没有人见过这种行为?
UPDATE
有一个问题在JIRA关于与修复建议沿着这个问题.我发布了详细信息作为答案.
UPDATE
问题是由于maven 3.0.3(1.11)中使用的以太版本.版本1.12的以太修复了这个问题.我检查了maven 3.0.3的源代码并编辑了POM,将以太版本从1.11更改为1.12.然后我从源代码构建了maven,用我构建的版本替换了我当前的版本.构建时间的缩短是显着的.
如果您不想从源代码构建maven,可以使用1.12版本替换maven的lib目录中的以太库.这也应该有效.
我不确定这个改变是否会进入3.0.4,因为maven开发人员说有许可证的变化从以太1.11到以太1.12,所以他们仍在讨论它.
spring ×3
java ×2
spring-3 ×2
validation ×2
autowired ×1
bnf ×1
code-golf ×1
ebnf ×1
exception ×1
generics ×1
hal-json ×1
javascript ×1
logo-lang ×1
maven ×1
maven-3 ×1
random ×1
rest ×1
spring-mvc ×1
testing ×1
type-erasure ×1