小编Lol*_*olo的帖子

使用很多静态方法是件坏事吗?

当该类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态.例如,如果我需要将A转换为B并且不依赖于可能变化的某个内部状态C,则创建静态转换.如果有一个我希望能够调整的内部状态C,那么我添加一个构造函数来设置C并且不使用静态转换.

我阅读了各种建议(包括在StackOverflow上),不要过度使用静态方法,但我仍然无法理解上面的经验法则错误.

这是一种合理的方法吗?

language-agnostic static-methods

90
推荐指数
8
解决办法
3万
查看次数

单例类与静态成员的类

尽管有关该主题的许多主题,我仍然不清楚何时选择哪种方法.我希望通过讨论一个具体的例子,我终于"明白了".

注意:我的语言是Cocoa,尽管一般问题不是语言特定的.

我有一个类TaskQueue,我想用它:

  • 从我的代码中的任何位置访问,以添加或删除计划任务
  • 定期自动处理计划任务

首次使用TaskQueue时,我希望TaskQueue启动一个线程,然后定期唤醒该线程来处理任务.

显然,我至少需要两个变量:

  • 用于存储任务的数组
  • 处理任务的线程的实例

由于我只需要一个任务队列和一个线程来处理这些任务,我有两个选择:

  1. 做任务队列一个单独的类(如描述例如使用CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html,我相信我将不得不修改CWLSynthesizeSingleton. h文件在初始化时启动线程.)

  2. 让任务数组和线程实例都是静态的(遵循这里建议的方法:如何在Objective-C中声明类级属性?)

在这个特定情况下,是否有一种方法比另一种方法更好?如果是这样,为什么?

singleton static-members

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

yammer @Timed将值保持为零

这是一个后续使用Yammer的定时注解描述了我的奋斗这里.

我的春天上下文文件很简单:

<metrics:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

我有以下课程:

import com.yammer.metrics.annotation.ExceptionMetered;
import com.yammer.metrics.annotation.Metered;
import com.yammer.metrics.annotation.Timed;

...

@Component
public class GetSessionServlet extends HttpServlet {

  private final static Logger log = LoggerFactory.getLogger(GetSessionServlet.class);


  @Override
  public void init(final ServletConfig config) throws ServletException {
    super.init(config);
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(
            this, config.getServletContext());
  }

  @Override
  @Timed(name = "get-session", rateUnit = TimeUnit.MILLISECONDS)
  @Metered
  @ExceptionMetered(name = "get-session-failures", rateUnit = TimeUnit.MILLISECONDS)
  public void doGet(final HttpServletRequest req,
          final HttpServletResponse resp) throws ServletException, IOException {
    final String sessionId = req.getParameter("sessionId");
    final String fields = req.getParameter("fields");
    final String …
Run Code Online (Sandbox Code Playgroud)

java spring metrics annotations yammer

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

如何仅排除特定范围的依赖项?

我的pom中有两个依赖项,称为A和B.A和B都具有对工件C(cassandra-all)的传递依赖性.A和B使用C的不同版本.依赖A是人工神经astyanax.

我想保留B附带的C 版本.我通过在A(Astyanax)中为C添加排除来完成.

不幸的是,我希望B的范围是"测试".这意味着在A中排除,C不会包含在测试范围之外.

我该如何解决这个问题?排除只能针对特定范围吗?或者,我可以指定用于传递依赖的版本吗?


示例:
这是我的pom的样子:

神器A(astyanax),不包括对神器C的依赖(称为cassandra-all)

    <dependency>
        <groupId>com.netflix.astyanax</groupId>
        <artifactId>astyanax</artifactId>
        <version>1.0.4</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.cassandra</groupId>
                <artifactId>cassandra-all</artifactId>
            </exclusion>
        </exclusions>  
    </dependency>
    <dependency>
        <groupId>org.cassandraunit</groupId>
        <artifactId>cassandra-unit</artifactId>
        <version>1.1.1.1</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

具体来说:当我在测试范围之外运行代码并且仍然只保留cassandraunit测试的范围时,如何包含cassandra-all?

dependencies maven

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

如何使用egit和Eclipse合并文件并提交它们?

使用Eclipse + egit向主分支提交更改的建议步骤是什么?

我已经使用Eclipse和svn很长一段时间了,一切都很好用.每当我要进行更改时,我的流程如下:

  • 与工作区同步
  • 寻找冲突
  • 找到冲突时,手动合并,然后将文件标记为已合并
  • 更新
  • 承诺

在极少数情况下,我尝试在没有提交的情况下提交一组文件,我会收到警告,并且可以很好地纠正这些更改.

即使我更新了冲突的文件,也可以从中恢复,虽然我发现首先与工作区同步以识别和合并冲突的文件比在因冲突而失败的更新后尝试合并要好得多.

有了egit,我试过的流量没有正常工作.首先,如果我错误地从服务器拉出来并且存在冲突,我被告知存在冲突,但我对此非常困惑:我很难从服务器检索最新版本并发现无法提交我的文件无论我做多少同步.甚至用最新的头文件替换我的文件并做另一个拉动然后提交似乎不再起作用.

即使我遵循与svn相同的方法(首先同步并手动合并文件和冲突)并按下第二个拉,我仍然得到上面提到的相同的失败,就好像我标记合并的文件没有计算对于.

所以......空白的纸张,当我做了一些更改时,建议的说明是什么,想要将它们与服务器上的最新代码合并(可能包括与我的更改集冲突的文件更改),并且,可选地,想要提交我的更改?如果有人讨论这类问题,那么指向一个好的egit教程是很好的.

eclipse git synchronization commit egit

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

NSDate比较时不兼容的指针类型

以下代码:

NSDate* date1 = [NSDate date];
NSDate* date2 = [NSDate date];
[date1 compare:date2];
[(NSDate*)[NSDate date] compare:date2];
[[NSDate date] compare:date2];
Run Code Online (Sandbox Code Playgroud)

给我"不兼容的指针类型,将'NSDate*'发送到'NSNumber*'类型的参数",用于最后一次日期比较,但不是前两个!

到底是怎么回事???

cocoa compare nsdate

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

在cocoa中声明静态变量

我想在Cocoa中有一个静态变量.

看看如何在Objective-C中声明类级属性?,我不清楚到目前为止我所做的事情是否有任何问题,即

// Foo.m
static NSString* id;
@interface Foo ()
Run Code Online (Sandbox Code Playgroud)

代替

// Foo.h
@interface Foo {
}

+(NSString*) id;

// Foo.m
+(NSString*) id
{
  static NSString* fooId = nil;

  if (fooId == nil)
  {
    // create id
  }

  return fooId;
}
Run Code Online (Sandbox Code Playgroud)

显然,第二种方法提供了初始化id的机会.但是,如果我自己在代码中的其他地方初始化id,在一个getter中说:

-(NSString*) getId
{
    if (id==nil) {
      id =  ... // init goes here
    }
    return id;
}
Run Code Online (Sandbox Code Playgroud)

那么简单的静态声明方法与更复杂的类函数方法相比有什么不对吗?我错过了什么?

variables cocoa static class

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

CPU缓存性能。存储未命中与加载未命中

我使用 perf 作为基本事件计数器。我正在开发一个遭受数据缓存存储未命中的程序。其中比例高达80%。

我知道缓存原则上是如何工作的。它会在各种未命中情况下从内存加载,并在需要时从缓存中删除数据。我不明白的是:存储未命中和加载未命中之间有什么区别。它与加载和存储有何不同。你怎么能储存错过呢?

performance caching cpu-cache perf

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

变量的生命周期

我不清楚在 C 中保证分配变量多长时间。

例如,如果我有:

void foo(void) {
  int x;
  int* y = &x;
  ...
}
Run Code Online (Sandbox Code Playgroud)

堆栈上分配的空间是否x保证在整个持续时间内专门为此变量保留foo()?换句话说,y保证指向一个在 的整个持续时间内保留的位置foo,或者编译器可以决定,由于x没有被使用,堆栈空间可以用于其中的其他用途foo,因此*y可能会在不访问y(或x直接)?

c variables stack scope

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

无法将nginx配置为邮件代理

我需要使用nginx作为邮件代理.我是nginx的新手,需要一些配置方面的帮助.

这是我做的:

首先,我构建了一个服务来模拟此处描述的身份验证服务:http://wiki.nginx.org/NginxMailCoreModule.例如,

curl -v -H "Host:auth.server.hostname" -H "Auth-Method:plain" -H "Auth-User:user" -H "Auth-pass:123" -H "Auth-Protocol:imap" -H "Auth-Login-Attempt:1" -H "Client-IP: 192.168.1.1" http://localhost:8080/authorize
Run Code Online (Sandbox Code Playgroud)

返回以下响应头:

< HTTP/1.1 200 OK
< Content-Type: text/html;charset=ISO-8859-1
< Auth-Status: OK
< Auth-Server: 192.168.1.10
< Auth-Port: 110
Run Code Online (Sandbox Code Playgroud)

其次我在安装macports后在我的mac上安装了nginx:

$ sudo port -d selfupdate
$ sudo port install nginx
Run Code Online (Sandbox Code Playgroud)

第三,我用以下内容创建了一个nginx.conf:

  worker_processes  1;

  error_log  /var/log/nginx/error.log info;

  mail {
      server_name  <my mail server here>;
      auth_http    http://localhost:8080/authorize;

      pop3_auth         plain apop cram-md5;
      pop3_capabilities "LAST" "TOP" "USER" "PIPELINING" …
Run Code Online (Sandbox Code Playgroud)

email proxy nginx

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