小编Eth*_*man的帖子

在java中重复String的简单方法

我正在寻找一个简单的公共方法或运算符,它允许我重复一些字符串n次.我知道我可以使用for循环来编写它,但我希望在必要时避免使用循环,并且某处应该存在一个简单的直接方法.

String str = "abc";
String repeated = str.repeat(3);

repeated.equals("abcabcabc");
Run Code Online (Sandbox Code Playgroud)

相关:

repeat string javascript 通过重复给定次数的另一个字符串来创建NSString

编辑

当他们不是完全必要的时候我试着避免循环,因为:

  1. 即使它们隐藏在另一个函数中,它们也会增加代码行数.

  2. 读我的代码的人必须弄清楚我在循环中做了什么.即使它被评论并且具有有意义的变量名称,它们仍然必须确保它没有做任何"聪明"的事情.

  3. 程序员喜欢把聪明的东西放在for循环中,即使我把它写成"只做它想要做的事情",这并不排除有人出现并增加一些额外的聪明"修复".

  4. 他们经常容易出错.对于涉及索引的循环,往往会产生一个错误.

  5. For循环经常重用相同的变量,增加了很难找到范围错误的机会.

  6. For循环增加了bug猎人必须看的地方数量.

java string

543
推荐指数
18
解决办法
45万
查看次数

Java垃圾收集日志消息

我已经将java配置为将垃圾收集信息转储到日志中(详细GC).我不确定日志中的垃圾收集条目是什么意思.这些条目的样本发布在下面.我在Google上搜索过,并没有找到可靠的解释.

我有一些合理的猜测,但我正在寻找答案,这些答案提供了条目中数字的严格定义,并由可靠的消息来源支持.对所有引用sun文档的答案自动+1.我的问题是:

  1. PSYoungGen是指什么?我认为它与之前的(年轻?)一代有关,但具体到底是什么?
  2. 第二个三元组和第一个三元组有什么区别?
  3. 为什么名称(PSYoungGen)指定为第一个三元组而不是第二个?
  4. 三元组中的每个数字(内存大小)是什么意思.例如,在109884K-> 14201K(139904K)中,是GC 109884k之前的存储器,然后它减少到14201K.第三个数字如何相关?为什么我们需要第二组数字?

8109.128:[GC [PSYoungGen:109884K-> 14201K(139904K)] 691015K-> 595332K(1119040K),0.0454530秒]

8112.111:[GC [PSYoungGen:126649K-> 15528K(142336K)] 707780K-> 605892K(1121472K),0.0934560 secs]

8112.802:[GC [PSYoungGen:130344K-> 3732K(118592K)] 720708K-> 607895K(1097728K),0.0682690 secs]

java logging garbage-collection

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

gnuplot vs Matplotlib

我已经开始使用gnuplot-py绘制Tomcat日志的项目,特别是将特定请求与内存分配和垃圾收集相关联.对于Python绘图,gnuplot-py与Matplotlib的集体智慧是什么?有没有更好的图形库我还没有听说过?

我的一般考虑是:

  • 虽然gnuplot有大量的文档,但gnuplot-py却没有.Matplotlib的文档社区有多好?
  • 是否有gnuplot可以做的事情,但gnuplot-py不能?
  • Matplotlib有更好的Python支持吗?
  • 是否有大型节目阻止错误?烦恼?
  • 目前gnuplot正在绘制100,000点积分,我计划将其扩展到数百万.我应该期待问题吗?Matplotlib如何处理这个问题?
  • 易用性,gnuplot与Matplotlib的周转时间?
  • 将现有的gnuplot-py代码移植到Matplotlib是多么容易?

你将如何处理这项任务?

python graphing logging gnuplot matplotlib

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

平台无关size_t c中的格式说明符?

我想size_t在C中打印出一个类型的变量,但似乎size_t在不同的体系结构上别名为不同的变量类型.例如,在一台计算机(64位)上,以下代码不会抛出任何警告:

size_t size = 1;
printf("the size is %ld", size);
Run Code Online (Sandbox Code Playgroud)

但在我的另一台机器(32位)上面的代码会产生以下警告消息:

警告:格式'%ld'需要类型'long int*',但参数3的类型为'size_t*'

我怀疑这是由于指针大小的不同,所以在我的64位机器size_t上别名为a long int("%ld"),而在我的32位机器size_t上别名为另一种类型.

是否有专门用于的格式说明符size_t

c size-t platform-independent format-specifiers format-string

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

HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR有什么区别?

据我所知,HTTP_X_FORWARDED_FOR代理服务器设置了一个标头,用于标识通过代理发出HTTP请求的主机的IP地址.我听说过标题HTTP_CLIENT_IP是出于类似目的设置的.

  1. HTTP_CLIENT_IP和之间有什么区别HTTP_X_FORWARDED_FOR
  2. 为什么一个人的价值观不同于另一个?
  3. 我在哪里可以找到有关这些标题的确切定义的资源.

proxy header http ip-address

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

编写安全C和安全C习语

"普通人不想自由.他只是想要安全." - HL Menken

我正在尝试编写非常安全的C.下面我列出了一些我使用的技术,并且询问它们是否像我认为的那样安全.请不要犹豫将我的代码/先入之见撕成碎片.任何能找到最微不足道的漏洞或者教我一个新想法的答案都会受到高度重视.

从流中读取:

根据GNU C编程教程 getline:

getline函数将根据需要通过realloc函数自动扩大内存块,因此永远不会缺少空间 - 这是getline如此安全的一个原因.[..]请注意,无论多长时间,getline都可以安全地处理您的输入线.

我假设getline应该在所有输入下防止从流中读取时发生缓冲区溢出.

  • 我的假设是否正确?是否存在可能导致漏洞利用的输入和/或分配方案?例如,如果流中的第一个字符是一些奇怪的控制字符,可能是0x08 BACKSPACE(ctl-H).
  • 有没有做过任何工作来数学证明getline是安全的?

Malloc在失败时返回Null:

如果malloc遇到错误,malloc将返回NULL指针.这会带来安全风险,因为仍然可以将指针算法应用于NULL(0x0)指针,因此维基百科推荐

/* Allocate space for an array with ten elements of type int. */
int *ptr = (int*)malloc(10 * sizeof (int));
if (ptr == NULL) {
    /* Memory could not be allocated, the program should handle 
       the error here as appropriate. */
} 
Run Code Online (Sandbox Code Playgroud)

安全sscanf:

当使用sscanf时,我已经养成了将要提取的字符串分配给输入字符串大小的习惯,希望避免出现溢出的可能性.例如:

const char *inputStr = "a01234b4567c";
const …
Run Code Online (Sandbox Code Playgroud)

c security exploit buffer-overflow

41
推荐指数
2
解决办法
6650
查看次数

Stack Smashing尝试给出段错误

我试图通过Smashing the Stack for Fun和Profit在C中做一个例子,但我有点卡在一点,以下是代码(我有一个64位机器与Ubuntu 64位):

int main()
{
    int x;

    x = 0;
    func(1,2,3);
    x = 1;
    printf("x is : %d\n", x);
}

void func(int a, int b, int c)
{
    char buffer[1];
    int *ret;

    ret = buffer + 17;
    (*ret) += 7;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,并且在返回x=1行时没有执行,但我无法理解背后的逻辑ret = buffer + 17;,不应该是ret = buffer + 16;8字节用于缓冲区,8用于保存的栈指针上的指针.

其次,我的理解是char buffer[1]占用8个字节(由于64位拱)并且如果我增加这个缓冲区来说buffer[2],仍然相同的代码应该工作正常,但这不会发生并且它开始给出seg错误.

此致,努曼

c buffer-overflow shellcode

26
推荐指数
3
解决办法
2901
查看次数

如何以安全可读的方式处理我知道永远不会抛出的IOException?

"可能出错的事情与不可能出错的事情之间的主要区别在于,当一件不可能出错的事情出错时,通常会发现无法进入或修复." -道格拉斯·亚当斯

我有一个类FileItems.FileItems构造函数接受一个文件,如果该文件不存在则抛出异常(FileNotFoundException).该类的其他方法也涉及文件操作,因此具有抛出FileNotFoundException的能力.我想找到一个更好的解决方案.一种解决方案,不需要其他程序员处理所有这些极不可能的FileNotFoundExceptions.

事情的事实:

  1. 该文件已被检查存在,但存在极不可能的可能性,通过一些重大的现实错误,在调用此方法之前可能会删除该文件.
  2. 由于1发生的概率非常不同且不可恢复,我宁愿定义一个未经检查的异常.
  3. 该文件已经被发现存在,迫使其他程序员编写代码并捕获已检查的FileNotFoundException,这似乎很乏味且无用.该程序应该在那时完全失败.例如,计算机总是有可能着火,但没有人疯狂到足以迫使其他程序员将其作为检查异常来处理.
  4. 我不时遇到这种异常问题,并且每次遇到这个问题时定义自定义未经检查的异常(我的旧解决方案)都很烦人并且增加了代码膨胀.

代码目前看起来像这样

 public Iterator getFileItemsIterator() {
    try{
        Scanner sc = new Scanner(this.fileWhichIsKnowToExist);
        return new specialFileItemsIterator(sc);        
       } catch (FileNotFoundException e){ //can never happen} 

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

如何在不定义自定义未经检查的FileNotFoundException的情况下更好地完成此操作?有没有办法将checkedException转换为uncheckException?

java exception-handling exception ioexception

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

用于简单堆栈溢出的Shellcode:带有shell的被利用程序在execve("/ bin/sh")之后直接终止

我在Linux(amd64)上玩过缓冲区溢出并试图利用一个简单的程序,但它失败了.我禁用了安全功能(使用sysctl -w kernel.randomize_va_space = 0和bios中的nx位进行地址空间布局随机化).它跳转到堆栈并执行shellcode,但它不会启动shell.execve系统调用成功,但之后它就会终止.知道什么是错的吗?运行shellcode独立工作正常.

额外问题:为什么在调用printf之前需要将rax设置为零?(见代码中的评论)

易受攻击的文件缓冲区:

.data
.fmtsp:
.string "Stackpointer %p\n"
.fmtjump:
.string "Jump to %p\n"
.text
.global main
main:
    push %rbp
    mov %rsp, %rbp

    sub $120,  %rsp

    # calling printf without setting rax
    # to zero results in a segfault. why?
    xor %rax, %rax 
    mov %rsp, %rsi
    mov $.fmtsp, %rdi
    call printf

    mov %rsp, %rdi
    call gets

    xor %rax, %rax
    mov $.fmtjump, %rdi
    mov 8(%rbp), %rsi
    call printf

    xor %rax, %rax
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

shellcode.s

.text
.global …
Run Code Online (Sandbox Code Playgroud)

security assembly buffer-overflow shellcode

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

在生产中分析Web应用程序的性能成本

我正在尝试使用大型复杂的tomcat java Web应用程序解决性能问题.目前最大的问题是,内存使用量不时出现峰值,应用程序也无法响应.我已经修复了我可以使用日志分析器和日志文件的贝叶斯分析修复的所有内容.我正在考虑在生产tomcat服务器上运行一个分析器.

温柔敏感的读者注意事项:

据我所知,有些人可能会发现将生产应用程序分析为冒犯的概念.请放心,我已经用尽了大部分其他选择.我考虑这个的原因是我没有资源在我的测试服务器上完全复制我们的生产设置,而且我无法在我的测试服务器上引起感兴趣的失败.

问题:

我正在寻找能够在tomcat上运行的java Web应用程序,或者以语言无关的方式回答这个问题的答案.

  • 分析的性能成本是多少?
  • 为什么在生产中远程连接和分析Web应用程序(奇怪的故障模式,安全问题等)是一个坏主意的任何其他原因?
  • 分析对内存占用的影响有多大?
  • 特别是那些具有非常低的性能成本的java分析工具?
  • 用于分析Web应用程序的任何Java分析工具?
  • 有没有人对使用visualVM进行性能分析的性能成本进行基准测试?
  • visualVM可以扩展到什么尺寸的应用程序和数据集?

java language-agnostic profiling visualvm production-environment

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