小编Pét*_*rök的帖子

如果软件组件内部尽可能避免线程?

我最近一直在研究代码,特别是在内部使用线程的面向组件的代码.这是一个不好的做法.我看到的代码来自一个F#示例,它展示了使用基于事件的编程技术.我不能在版权侵权的情况下发布代码,但它确实启动了自己的线程.这被认为是不好的做法,或者自己编写的代码是否可以完全控制线程创建是否可行.我确实指出,这段代码不是一个可视化组件,而且非常"从头开始构建".

在线程有用的组件创建的最佳实践是什么?

我对此完全是语言不可知的,f#示例可能是在c#或python中.

我担心缺乏对组件运行时间和资源占用的控制,这个例子只是实现了另一个线程,但据我所知,没有什么能阻止这种类型的设计产生尽可能多的线程,到你的程序允许的极限.

我确实想过像对象注入这样的方法,所以第四,但线程很奇怪,因为它们是从组件角度来看纯粹的"动作"而不是"模型,状态,声明"

任何帮助都会很棒.

c# f# multithreading components design-patterns

2
推荐指数
1
解决办法
201
查看次数

通过复制派生类的另一个对象,在创建派生类的对象时调用基类的复制构造函数

class base {};
class der : public base{};


der d1;
der d2(d1);
Run Code Online (Sandbox Code Playgroud)

此语句调用类base的默认构造函数,然后复制claas der的构造函数.我的问题是为什么C++没有提供调用基类复制构造函数的功能,同时通过复制派生类的另一个对象来创建派生类的对象

c++ inheritance language-design copy-constructor

2
推荐指数
1
解决办法
3152
查看次数

Log4j每天滚动catalina.out而不重启Tomcat?

我正确配置Log4j时遇到问题.我希望Log4j能够在午夜时将我的catalina.out文件旋转,如下所示


:log4j.properties:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=/var/log/tomcat7/catalina.out
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8

# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n
Run Code Online (Sandbox Code Playgroud)


配置完成后,我重新启动了Tomcat,所有内容都写入:

/var/log/tomcat7/catalina.out
Run Code Online (Sandbox Code Playgroud)


为了测试我的配置,我将当前日期时间更改为23:59:59:

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 00:00 catalina.out
Run Code Online (Sandbox Code Playgroud)


如你所见,它在午夜没有旋转...(?)

重新启动Tomcat时,它完全正常:

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 13:37 catalina.out
-rw-r--r-- 1 tomcat7 root    2395  4. May 00:00 catalina.out.*CURRENTDATE*.log
Run Code Online (Sandbox Code Playgroud)

甚至可以在不重启Tomcat的情况下旋转我的日志文件吗?

谢谢,马利

java log4j rotation catalina tomcat7

2
推荐指数
1
解决办法
2万
查看次数

Vaadin基本布局:固定页眉和页脚+可滚动内容

我是Vaadin的新手,并试图了解它是否适​​合我对webapp项目迁移的需求.实际上我已经在一个简单的目标上浪费了我的时间:拥有固定页眉和页脚的布局,以及中间的可滚动内容.我用我想要的东西做了一个非常基本的小提琴: jsfiddle

这是我提出的主要Vaadin课程:

public class MyVaadinUI extends UI {

// attributes

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class, widgetset = "testvaadin.aep.com.AppWidgetSet")
public static class Servlet extends VaadinServlet {
}

@Override
protected void init(VaadinRequest request) {

    buildMainLayout();
}

private void buildMainLayout() {

    final VerticalLayout mainLayout = new VerticalLayout();
    mainLayout.setSizeFull();

    //HEADER
    final VerticalLayout headerLayout = new VerticalLayout();
    final Resource res = new ThemeResource("img/logo.png");
    final Image image = new Image(null, res);
    headerLayout.addComponent(image);

    //CONTENT
    final VerticalLayout contentLayout = new …
Run Code Online (Sandbox Code Playgroud)

java layout header footer vaadin

2
推荐指数
1
解决办法
8500
查看次数

1
推荐指数
1
解决办法
1550
查看次数

螺母和螺栓参考C#性能和内存使用

我想知道是否有人能指出我可以阅读关于C#的章节的方向.我对学习感兴趣的是方法调用成本,创建对象的成本等等.

我的目的是更好地了解如何提高应用程序的性能并更好地理解C#语言的工作原理.

参考书最好是一本书,一本书,我可以阅读封面.

c#

1
推荐指数
1
解决办法
203
查看次数

对许多类的堆栈和堆中创建的对象进行计数

计算不同类在堆栈和堆中创建的对象总数的最佳方法是什么。我知道在C ++中,new和delete运算符可以重载,因此,在默认的构造函数和析构函数中,对象数可以随着对象的创建或销毁而增加或减少。

此外,如果我要扩展同一事物来对不同类的对象进行对象计数,那么我可以创建一个哑类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。

对于同一问题,是否还有其他最佳解决方案。

c++

1
推荐指数
1
解决办法
2064
查看次数

数组的subList - 转换为Generic Type时的ClassCastException

我写了一个小实用工具方法,但它总是产生一个ClassCastException,任何想法为什么?以及如何解决它?

<T> T[] subArray(int begin, int end, T[] array) {
    int size = end - begin;
    Object[] newArray = new Object[size];
    for (int i = 0; i < size; i++) {
        newArray[i] = array[begin + i];
    }
    return (T[]) newArray;
}
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

java.lang.ClassCastException: [Ljava.lang.Object;
at org.robert.distance.framework.FacadeTest.testSubArray(FacadeTest.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at …
Run Code Online (Sandbox Code Playgroud)

java generics

1
推荐指数
2
解决办法
1750
查看次数

如何将参数列表"$ @"分配给另一个变量?

在shell脚本中我希望变量p等于"$@",以便以下两行代码产生相同的结果:

for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done
Run Code Online (Sandbox Code Playgroud)

如果我这样做p=$@或者p="$@"这不起作用.当命令行参数的名称中有空格时,我找不到这个问题的简单解决方法(组合p="$@"for x in $p(在$ p周围删除的引号)在没有空格时有效).

parameters bash shell

1
推荐指数
1
解决办法
582
查看次数

哪种基于JVM的脚本语言使用"when"作为分支控制关键字(而不是"if")?

我看到一个带有代码片段的演示文稿,其中包含"when"而不是"if".代码看起来像基于JVM的脚本语言,使用缩进而不是"{}"而不是每行都用';'完成

你能给我一个线索,它可能是哪种语言?

programming-languages jvm-languages indentation

1
推荐指数
1
解决办法
111
查看次数