小编use*_*751的帖子

如何在Java中动态传递方法名称

我有一个如下的班级

public class Test
{
     private Long id;
     private Long locationId;
     private Long anotherId;

    public Long getId() {
    return id;
}


public void setId(Long id) {
    this.id = id;
}


public Long getLocationId() {
    return locationId;
}


public void setLocationId(Long locationId) {
    this.locationId = locationId;
}


public Long getAnotherId() {
    return anotherId;
}


public void setAnotherId(Long anotherId) {
    this.anotherId = anotherId;
}
}
Run Code Online (Sandbox Code Playgroud)

我在各个地方使用以下方法通过使用id,locationId或anotherId查找匹配的对象

public Test getMatchedObject(List<Test> list,Long id )
{

          for(Test vo : list)
                if(vo.getId() != null && vo.getId().longValue() …
Run Code Online (Sandbox Code Playgroud)

java reflection

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

是否有可能帮助分支预测?

您是否可以有意识地以特定方式编写代码,以便分支预测器将选择大多数情况下的选项.例如,错误检查资源是否已加载.如果可能的话,你如何利用这个优势?

c c++ java branch-prediction

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

SetWindowPos 如何影响所有者窗口的 Z 顺序?

SetWindowPos函数接受以下标志:

SWP_NOOWNERZORDER (0x0200)
不改变所有者窗口在 Z 顺序中的位置。

什么确实SetWindowPos功能做主人窗口在Z顺序中的位置,如果不通过这个标志?

windows winapi

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

Haskell 中的这个一元函数是如何工作的?

我正在努力理解这个功能**

  -- split at whitespace
  -- f "hello world" -> ["hello","world"]

  f =  takeWhile (not . null) . evalState (repeatM $ modify (drop 1) 
    >> State (break (== ' '))) . (' ' :)
    where repeatM = sequence . repeat
Run Code Online (Sandbox Code Playgroud)

我已经在努力理解状态单子,并且缺乏类型签名和无点风格使其更加令人困惑。

这里发生了什么?

** 取自这里

haskell

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

当 CPL=3 时发生硬件中断时,导致仅设置写入位的 x86-64 页面错误的原因

我正在使用 Rust 编写自己的内核(大致基于 phil-opp 的博客,https://os.phil-opp.com/),到目前为止,我已经成功复制了 4 级页表,为用户模式应用程序代码和数据,将裸函数映射到虚拟地址0x40000000000,设置堆栈并跳转到代码。我还有一个使用 syscall/sysret 工作的系统调用处理程序,它在遇到系统调用时简单地打印一条消息。我注意到,每当 PIC 定时器中断发生时,它总是在 CPL=0 时发生,因为系统调用处理程序的代码比用户模式应用程序长很多倍,后者只是在无限循环中执行系统调用。如果我禁用打印(这需要大多数指令),则在循环数百次迭代之后,当 CPL=3 时会发生计时器中断。然而,CPU 没有调用中断处理程序,而是抛出一个页面错误,错误代码为 2(仅对应于写入位设置)。在我看来,这没有任何意义,问题可能出在哪里?

总表:

static ref GDT: (gdt::GlobalDescriptorTable, Selectors) = {
    let mut gdt = gdt::GlobalDescriptorTable::new();
    let kernel_code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment());
    let kernel_data_selector = gdt.add_entry(gdt::Descriptor::kernel_data_segment());
    let tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&TSS));
    let user_data_selector = gdt.add_entry(gdt::Descriptor::user_data_segment());
    let user_code_selector = gdt.add_entry(gdt::Descriptor::user_code_segment());
    (gdt, Selectors { kernel_code_selector, kernel_data_selector, tss_selector, user_code_selector, user_data_selector })
    };
Run Code Online (Sandbox Code Playgroud)

离散时间:

const DOUBLE_FAULT_IST_INDEX: u16 = 0;
let mut IDT: idt::InterruptDescriptorTable = idt::InterruptDescriptorTable::new();
IDT.breakpoint.set_handler_fn(interrupts::breakpoint::breakpoint_handler);
IDT.double_fault.set_handler_fn(interrupts::double_fault::double_fault_handler).set_stack_index(DOUBLE_FAULT_IST_INDEX);
IDT.page_fault.set_handler_fn(interrupts::page_fault::page_fault_handler);
IDT.general_protection_fault.set_handler_fn(interrupts::general_protection_fault::general_protection_fault_handler);
IDT.stack_segment_fault.set_handler_fn(interrupts::stack_segment_fault::stack_segment_fault_handler);
IDT.segment_not_present.set_handler_fn(interrupts::segment_not_present::segment_not_present_handler); …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly osdev rust

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

定点反正弦

有没有人知道(最好是快速)计算4.12固定点角度正弦的方法?(结果是一个圆或度的32768ths)

4.12定点意味着数字是16位并且左移12,所以1.0变为(1 << 12)或4096. 0.5是(0.5 << 12)== 2048等.

algorithm trigonometry fixed-point

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

防止分配到右值

假设我有一个带有重写赋值运算符的类:

class Test
{
public:
    Test& operator =(const Test&) {return *this;}
};

Test f();
Run Code Online (Sandbox Code Playgroud)

有没有办法让它成为编译时错误来分配函数的结果?

例子:

f() = test();

Test t;
f() = t;

// if there were also a Test Test::operator+(Test);
(t + t) = test();
Run Code Online (Sandbox Code Playgroud)

原始类型已经发生这种情况,我想为这个类复制它:

int g();
g() = 5; // error
(3 + 4) = 5; // error
Run Code Online (Sandbox Code Playgroud)

编辑:我使用的是Visual C++,它不支持所有的C++ 11.具体来说,它不支持ref-qualifiers.

c++ operator-overloading variable-assignment

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

程序仍然能够在setuid和setgid之后仅打开root用户文件

我正在编写一个程序,该程序将基于身份验证以不同的用户身份运行。该程序是setuid root,并在删除特权之前使用PAM身份验证。

身份验证后,我正在使用setuid()setgid()放弃特权。但是显然这还不够,因为在调用这些程序后,我的程序仍然似乎只能访问open()root用户文件。

有什么建议么?

#include <unistd.h>
#include <stdio.h>

// Code to drop Priv
int u = 1000, g = 1000;

printf("Starting User %d Group %d\n", (int) getuid(), (int) getgid());
printf("Setting User %d Group %d\n", u, g);
if (setgid(g) || setuid(u)) {
    printf("Could not set uid or gid %d", errno);
    return 0;
}
printf("Have set User %d Group %d\n", (int) getuid(), (int) getgid());
Run Code Online (Sandbox Code Playgroud)

其输出为:

Starting User 0 Group 0
Setting User 1000 Group 1000
Have …
Run Code Online (Sandbox Code Playgroud)

c linux permissions setuid

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

函数调用前面的 :: 是什么意思?

I2CDevice::I2CDevice(unsigned int bus, unsigned int device) {
    this->file=-1;
    this->bus = bus;
    this->device = device;
    this->open();
}

int I2CDevice::open(){
   string name;
   if(this->bus==0) name = BBB_I2C_0;
   else name = BBB_I2C_1;

   if((this->file=::open(name.c_str(), O_RDWR)) < 0){
      perror("I2C: failed to open the bus\n");
      return 1;
   }

   if(ioctl(this->file, I2C_SLAVE, this->device) < 0){
      perror("I2C: Failed to connect to the device\n");
      return 1;
   }

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

上面是做Linux I2C接口的部分代码,我的问题是:

this->file=::open(name.c_str(), O_RDWR)
Run Code Online (Sandbox Code Playgroud)

我认为这是尝试使用 open() 函数为文件描述符 this->file 分配一个值。但为什么会有一个“::”符号呢?为什么不只是“open()”。

c++

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

操作系统如何检测进程崩溃

操作系统如何知道 EIP 不再是有效/合法的指令并且该应用程序已崩溃?它如何知道何时生成故障转储数据?

c++ crash x86 osdev

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