小编Dav*_*ter的帖子

单例和公共静态变量Java

我有2个选择:

  1. 单身模式

    class Singleton{
        private static Singleton singleton = null;
    
        public static synchronized Singleton getInstance(){
            if(singleton  == null){
                singleton = new Singleton();
            }
            return singleton;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用一个static final字段

    private static final Singleton singleton = new Singleton();
    
    public static Singleton getSingleton() {
        return singleton;
    }
    
    Run Code Online (Sandbox Code Playgroud)

有什么不同?(单线程或多线程)

更新:我知道Bill Pugh或enum方法.我不是在寻找正确的方法,但我只使用过1.在1或2中是否有任何差异?

java singleton static-variables

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

boost :: variant实现

我只是对boost::variant实施感到好奇.

这样工作吗?

两名成员:

  1. 表示当前存储类型的数字(即第一个模板参数为0,第二个模板参数为1等)
  2. 所有可能类型的联合(当然最大的大小).

apply_visitor():

有一个switch关于代表当前存储类型的数字的语句来调用正确的重载(在最坏的情况下,这将被编译为跳转表,因此需要恒定的时间).

我知道还有一些优化可以肯定boost::variant不需要动态分配内存,详见此处,但我想我得到了这些.

c++ boost boost-variant

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

在 Linux 中如何获取 inode 的代号?

摘要:我想i_generation从用户空间获取 Linux(或至少 ext4)中文件的生成号 ( )。或者,“出生时间”(文件创建时间)。

我正在尝试编写一个双向文件同步程序(又名Unison),但没有中央数据库(简单,只需将数据存储在同步根中)并且通过保留文件移动(如果您想支持所有文件移动,则非常非常困难)例如,奇怪的情况,例如将文件移出随后删除的目录)。

拥有一种唯一标识文件的方法将使事情变得容易很多。我知道如何获取 inode 和设备号(通过stat),但由于 inode 可以重复使用(我自己也见过),我想使用更稳定的唯一标识。

我读过 NFS 使用“世代号”来唯一标识文件。在 NFS 中,( st_ino, i_generation) 组合用于在重新启动和服务器崩溃时唯一标识文件句柄(或至少防止重复使用同一文件句柄导致可能的数据损坏)。

不过我还没成功拿到号码。这个 ext4 文档似乎表明可以从 ext4 文件系统获取该数字,但我无法从用户空间获取它(我不会在内核空间中运行这个简单的程序)。看EXT4_IOC_GETVERSION。我在我的系统上找不到合适的头文件(LMDE、Debian 测试)。我可以找到两种选择:

  1. 尝试使用内核中的那个 - 失败说不应该从用户空间使用它。
  2. 尝试使用EXT2_IOC_GETVERSIONin <linux/ext2_fs.h>- 给出EBADF( errno9)。也许是因为我试图从 EXT4 文件系统获取 EXT2 信息?或者也许我做错了什么ioctl,这是我第一次尝试使用它。文件被正确打开,因为open在我的例子中调用返回 3 (这应该是有效的)。

代码:

#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <linux/ext2_fs.h>
#include <stdio.h>
#include <errno.h>

int main () {
    int fileno = open("generation.c", O_RDONLY); …
Run Code Online (Sandbox Code Playgroud)

linux inode ioctl stat

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

我如何像sed一样使用perl?

我有一个文件,有一些条目,如

--ERROR--- Failed to execute the command with employee Name="shayam" Age="34"

--Successfully executed the command with employee Name="ram" Age="55"

--ERROR--- Failed to execute the command with employee Name="sam" Age="23"

--ERROR--- Failed to execute the command with employee Name="yam" Age="3"
Run Code Online (Sandbox Code Playgroud)

我只需要提取命令执行失败的名称和年龄.在这种情况下,我需要提取shayam 34 sam 23 yam 3.我需要在perl中执行此操作.非常感谢..

perl

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

apt-get落后代理.用户名和密码中的特殊字符

我想设置apt-get在我的ubuntu盒子上使用代理.我已成功配置synaptic以使用代理,因此我可以安装软件包,但我希望能够使用命令行.

我的工作代理需要用户名和密码,两者都有特殊字符.

在我的.bashrc

export http_proxy="http://user@company:P@$$1234@10.20.30.40:80/"
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.

我也试过逃避特殊字符,但这似乎也不起作用:

export http_proxy="http://user\@company:P\@\$\$1234@10.20.30.40:80/"
Run Code Online (Sandbox Code Playgroud)

linux apt-get ubuntu-10.04

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

如何使用 apache httpclient Fluent 4.3.2 设置请求中的字符集

Request.config(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8)Request.elementCharset(charset)已弃用。

现在如何使用 flutter 将请求字符集设置为 utf-8 ?

Request.Post(url)
    .useExpectContinue()
    .version(HttpVersion.HTTP_1_1)
    .bodyString("Important stuff", ContentType.DEFAULT_TEXT)
    .execute().returnContent().asBytes();
Run Code Online (Sandbox Code Playgroud)

java request character-encoding apache-httpclient-4.x

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

模板参数1无效(Code :: Blocks Win Vista) - 我不使用模板

我的学校项目有些麻烦.

我有一节课:

#include "Group.h"
#include <vector>
#include <string>
using namespace std;

class User{
    private :
        string username;
        vector<Group*> groups;
        void show() {
            for(int i=0; i<groups.size(); i++)
                cout << groups[i]->getName() << "\n";
        }
        string getUsername(){return username;}

};
Run Code Online (Sandbox Code Playgroud)

#include "User.h"
#include <vector>
#include <string>
using namespace std;

class Group{
    private :
        string name;
        string getName(){return name;};
        User *f;
        vector<User*> m;
        void show(){
            for(int i=0; i<m.size(); i++)
                cout << m[i]->getUsername() << "\n";
        }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,它给了我错误:

E:\Group.h|31|error: ISO C++ forbids declaration of 'User' …
Run Code Online (Sandbox Code Playgroud)

c++ codeblocks

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