[置顶]关于博主

52coder.net是很早之前与同学一起脑洞的域名:中文名可以叫做-我爱程序员。我记得那年冬天孟非主持的非诚勿扰很火,我信誓旦旦的说以后要做一个网站,专门去为程序员解决个人问题,于是就有了现在的这个域名52coder.net。当时比较热衷于论坛,折腾过Discuz,在读书时折腾过,最多的时候同时在线人数超过1000,论坛的注册人数达到了2w左右,现在却早已忘记当初因为什么原因关闭论坛。

博客开始于2017年6月,希望博客用来记录自己的学习过程,渐渐通过几个月的时间喜欢上写点东西,目前学习的内容主要有C语言、数据结构、Linux系统编程、算法、LeetCode等,如果针对文章中的内容有任何疑......

UNIX/Linux系统管理技术手册

书架上的这块大部头书在5.1的时候终于有时间来学习了,本文将长期更新,记录UNIX/Linux系统管理技术手册学习中的疑问与解答。该书在豆瓣评分颇高,UNIX/Linux系统管理技术手册.勘误表在本文最后,如有疑问欢迎留言讨论。

笔记中实际操作的系统来自于ubuntu,运行在一款古董级的hp笔记本上,在Macbook Pro中运行了一台centos7虚拟机,电脑卡的时候关闭该虚拟机使用hp笔记本中的虚拟机。

[LeetCode C++实现]238. Product of Array Except Self

Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

Example:

Input:

Output:

Constraint: It's guaranteed that the product of the elements of any prefix or suffix of the array......

[LeetCode C++实现]105. Construct Binary Tree

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:

You may assume that duplicates do not exist in the tree.

For example, given

preorder = [3,9,20,15,7]

inorder = [9,3,15,20,7]

Return the following binary tree:

3

/ \

9 20

/ \

15 7

记得考研的时候学习数据结构,经常会遇到根据某两种序列求另一种序......

[LeetCode C++实现]53. Maximum Subarray

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],

Output: 6

Explanation: [4,-1,2,1] has the largest sum = 6.

刷到这道题的时候我想起来原来在理工大读书的时候有门课叫算法设计与分析,当时有个0 1背包问题,虽然当时不......

[LeetCode C++实现]124. Binary Tree Maximum Path

二叉树的题目虽然标着hard类型,但解起来有点爽,这道题目琢磨透了觉得非常的棒,可以说这种类型题目是一种套路。可以结合文章段错误segment fault分析一起使用更佳。或许屏幕前的朋友会有疑问,这篇讲函数调用栈的文章和leetcode124有啥关系?其实树里面很多递归的逻辑就是函数调用,直到调用到终止条件,然后层层向上返回的过程。

题目:

Given a non-empty binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes ......

一个volatile引发的血案

周六项目组加班赶进度发布版本,遇到一个奇怪的问题,根据代码分析必走的逻辑居然没有打印日志,简直有点怀疑人生了。恰好昨晚看APUE信号章节时有看到书中明确说明,如果不加volatile,就会导致开启编译优化时去除循环语句的问题。

最终根据提交记录发现有人将整个项目的编译选项由原来的O1修改为了O3,优化理由是:提高程序的执行速度。当然是用优化选项O3能够提高程序的执行速度,代码如果写的有问题,会导致意想不到的问题。有意思的是我追查了下代码改动记录,15年的时候就有人尝试将O1修改为O3,过了几天又改动回来,估计是搞不定各种奇奇怪怪的问题。

改编自APUE示例代码:

#include &......

setjmp与longjmp

最近换了一种方式看APUE,直接看source code,如果这个程序看完没有疑问,并且执行结果与预想中的一样就跳过,看到第10章信号的时候源码中居然有setjmp和longjmp,之前的理解是这两个函数不就是加强版的goto吗?前几天写了篇文章段错误segment fault分析,函数调用会涉及到函数信息入栈出栈,所以这看似简单的两个函数,程序执行背后有着复杂的函数栈切换过程。

apue信号章节中引入setjmp和longjmp函数是为了解决例子sleep1.c中存在的第三个问题。

#include <signal.h>

#include <unistd......

段错误segment fault分析

最近工作中改了不少core,对segment fault有了一些肤浅的认识,本篇文章会试图总结常见的原因,使用非常浅显的汇编知识加以印证,有多浅显呢? 今天早上刚刚学完这篇文章汇编语言入门教程。文章标题虽然从分析segment fault写起,但仍然会延续想到哪写到哪的风格,如果对文章有任何疑问,欢迎留言讨论。

段错误产生的种类

总结几种原因,这里划分可能不科学,这里的划分可能有重叠,比如1 2是8栈溢出的一种形式。

1.数组(vector)越界

2.使用strcpy strcat 等不安全的字符串操作函数

3.多线程访问全局变量未加锁

4.多线程使用线程不安全函数

5.信号处......

日常开发笔记总结(六)

信号安全函数

进程捕获到信号并对其进行处理时,进程正在执行的正常指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。如果从信号处理程序中返回,则继续执行在捕获到信号时进程正在执行的正常的指令序列。有如下三类函数不能在信号处理程序中调用(非信号安全函数)

a)已知它们使用静态数据结构(如getpwnam函数)

b)它们调用malloc或free函数

c)标准I/O函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构。这里需要特别说明一点,书上或网上一些例子,信号处理函数中调用了printf,这里仅仅为了直观说明程序的运行,printf不能在信号处理函数中调用。

......