小编St.*_*rio的帖子

了解聚集索引

由于PostgreSQL不支持聚簇索引,我正在考虑MSSQL服务器.我已经阅读了比较聚簇索引和非聚簇索引的文章.文章的要点是(强调我的):

非聚簇索引存储值和指向包含该值的实际行的指针.

由于表中的行以与聚簇索引完全相同的顺序存储在磁盘上,因此聚簇索引不需要存储指向实际行的指针

据我所知,没有是很困难的,支持物理表的数据进行排序,特别是如果表是多个驱动器之间的分裂.现在,我遇到了聚集索引概念,假设数据以某种顺序存储在物理上.这就是我所困惑的.

问题:什么是聚簇索引结构?它支持tree式的结构穿越过来,像PosgtreSQL做了btree索引?

sql sql-server indexing

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

理解发生在之前和同步

我正在尝试理解Java 发生 - 在订单概念之前,有一些东西看起来很混乱.据我所知,之前发生的只是行动集上的一个订单,并没有提供有关实时执行订单的任何保证.实际上(强调我的):

应该注意的是,两个动作之间存在的先发生关系并不一定意味着它们必须在实现中以该顺序发生.如果重新排序产生的 结果与合法执行一致,则不是非法的.

因此,所有它说的是,如果有两个动作w(写)和r(读),使得HB(W,R) ,较r 可能实际发生之前,w在执行,但不能保证它会的.w读取也会观察到写入r.

我如何确定在运行时随后执行两个操作?例如:

public volatile int v;
public int c;
Run Code Online (Sandbox Code Playgroud)

操作:

Thread A
v = 3;  //w

Thread B
c = v;  //r
Run Code Online (Sandbox Code Playgroud)

这里我们有,hb(w, r)但这并不意味着在分配后c会包含价值3.如何强制执行c3?同步订单是否提供此类保证?

java multithreading java-memory-model

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

decltype-specifier的目的

我正在阅读关于限定名称查找的条款.引用来自:

如果嵌套名称说明符中的:: scope resolution运算符前面没有decltype-specifier,则查找此前面的名称::仅考虑其专门化为类型的名称空间,类型和模板.

根据标准的定义decltype-specifier是:

decltype-specifier:
    decltype ( expression )
    decltype ( auto )
Run Code Online (Sandbox Code Playgroud)

这是什么意思?你能解释一下这个关键词的用途吗?

c++ decltype c++11 c++14

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

tomcat中connectionTimeout的含义

这个参数对tomcat意味着什么.它的声明server.xml 如下:

 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)

所以,我试着改变它

 <Connector connectionTimeout="2" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)

并没有注意到任何影响.我预计加载所需的每个页面超过2毫秒将产生504 - 连接超时错误.但事实并非如此.我正在使用eclipse并通过它修改该文件.

java eclipse tomcat

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

如果我们在事务执行期间终止JVM进程会发生什么?

我正在使用PostgreSQL 9.4.

如果批处理中的某些查询已经执行,那么在执行事务批处理更新(批处理大小= 50)期间有人杀死JVM进程会发生什么?

数据库中会有什么?

java postgresql jdbc

8
推荐指数
2
解决办法
875
查看次数

了解postgreSQL共享内存

我看过演示文稿,但仍然有一个关于共享缓冲区工作的问题.如幻灯片16所示,当服务器处理传入请求时,postmaster进程调用fork()以创建用于处理传入请求的子节点.这是一张照片: 在此输入图像描述

因此,除了它之外,我们拥有postmaster流程的完整副本pid.现在,如果子进程更新属于共享内存的某些数据(放入共享缓冲区,如幻灯片17所示),我们需要其他线程知道这些更改.图片:

在此输入图像描述

同步化过程是我不明白的.任何进程都拥有共享内存的副本,并且在复制时不知道另一个线程是否会将某些内容写入共享内存的副本.如果proc1通过调用创建后,稍后创建fork()另一个进程proc2并开始在共享内存的副本中写入内容,该怎么办?

问题:如何proc1知道如何处理被修改的共享内存部分proc2

sql postgresql

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

如何从lambda-functor的体中增加变量?

我试图从lambda表达式增加一个局部变量:

#include <iostream>

template<typename T>
T foo(T t){
    T temp{};
    [temp]() -> void { 
        temp++; 
    }();
    return temp;
}

int main()
{
    std::cout<< foo(10) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

但得到以下错误:

main.cpp: In instantiation of 'foo(T)::<lambda()> [with T = int]':

main.cpp:6:6:   required from 'struct foo(T) [with T = int]::<lambda()>'

main.cpp:8:6:   required from 'T foo(T) [with T = int]'

main.cpp:14:23:   required from here

main.cpp:7:13: error: increment of read-only variable 'temp'

         temp++; 

             ^
Run Code Online (Sandbox Code Playgroud)

在c ++ 11/14中是否有一些解决方法?

c++ lambda c++11 c++14

8
推荐指数
2
解决办法
1232
查看次数

是否有可能使java.lang.invoke.MethodHandle与直接调用一样快?

我正在比较性能MethodHandle::invoke和直接静态方法调用.这是静态方法:

public class IntSum {
    public static int sum(int a, int b){
        return a + b;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的基准:

@State(Scope.Benchmark)
public class MyBenchmark {

    public int first;
    public int second;
    public final MethodHandle mhh;

    @Benchmark
    @OutputTimeUnit(TimeUnit.NANOSECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int directMethodCall() {
        return IntSum.sum(first, second);
    }

    @Benchmark
    @OutputTimeUnit(TimeUnit.NANOSECONDS)
    @BenchmarkMode(Mode.AverageTime)
    public int finalMethodHandle() throws Throwable {
        return (int) mhh.invoke(first, second);
    }

    public MyBenchmark() {
        MethodHandle mhhh = null;

        try {
            mhhh = MethodHandles.lookup().findStatic(IntSum.class, "sum", MethodType.methodType(int.class, int.class, int.class));
        } catch (NoSuchMethodException …
Run Code Online (Sandbox Code Playgroud)

java performance jit jvm jmh

8
推荐指数
2
解决办法
649
查看次数

在C中理解printf

我试图理解printfC中的一个简单案例是如何工作的.我写了以下程序:

#include "stdio.h"

int main(int argc, char const *argv[])
{
    printf("Test %s\n", argv[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行objdump在二元我注意到Test %s\n寓于.rodata

objdump -sj .rodata bin

bin:     file format elf64-x86-64

Contents of section .rodata:
 08e0 01000200 54657374 2025730a 00        ....Test %s..
Run Code Online (Sandbox Code Playgroud)

如此格式化的打印似乎执行从rodata其他地方的其他模式复制.

在编译并运行它之后,stare ./bin rr我注意到brk在实际写入之前有一个系统调用.所以运行它

gdb catch syscall brk
gdb catch syscall write
Run Code Online (Sandbox Code Playgroud)

显示在我的情况下,当前中断等于0x555555756000,但然后设置为0x555555777000.当write发生格式化的字符串时

x/s $rsi
0x555555756260: "Test rr\n"
Run Code Online (Sandbox Code Playgroud)

位于"旧"和"新"休息之间.写入发生后,程序退出.

问题:为什么我们分配了这么多页面,为什么在写入系统调用后,中断没有返回到前一个页面?是否有任何理由使用brk而不是mmap …

c linux printf

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

为什么进入无限递归时JVM不会崩溃?

我正在编写一个要加载到JVM中的共享库,下面的行为让我陷入困境.这是我的Java类:

package com.test;

public class UnixUtil {
    static {
        System.loadLibrary("myfancylibrary");
    }
    static native int openReadOnlyFd(String path);
    static native int closeFd(int fd);
}

public class Main {

    public static void main(String[] args){
        int fd = UnixUtil.openReadOnlyFd("/tmp/testc");
        UnixUtil.closeFd(fd);
    }
}
Run Code Online (Sandbox Code Playgroud)

要加载的库看起来像:

test_jni.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_UnixUtil */

#ifndef _Included_com_test_UnixUtil
#define _Included_com_test_UnixUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_test_UnixUtil
 * Method:    openReadOnlyFd
 * Signature: (Ljava/lang/String;)I …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface jvm shared-libraries

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