---
# System prepended metadata

title: Weride.ai

---



1st round:
leetcode 68

2nd round:
leetcode 23

3rd round:
leetcode 76 
using `top` command to analyze a process, what's the status: running, sleeping, terminated

**how to detect and solve memory leak** (where I got negative feedback)

4th round:
leetcode 200

1. efficiency optimization (等林習補充)
2. cv

5th round:
negative feedback: handling edge case

given two classes, Grouper can read data to Input
sample input, [1,"abc"], [1, "sfddsf"], [2, "efeg"], [1,"ewtgewg"]
requirement: let Grouper output vector<string> with same key. **Reading all input at once is not allowed.**

```
class Input{
    bool has_next();
    pair<int, string> next();
};

class Grouper{
    Grouper(Input* input){
    
    }
    bool has_next();
    pair<int, vector<string>> next(){
        //implementation
    }
};
```
    
follow up: one input to k input
->merged k sorted input
```
class Grouper{
    Grouper(vector<Input*> inputs){
        
    }
}
```
1. const char p* const; two const meaning
2. virtual destructor
3. call virtual function in a contructor
4. smart pointers
5. analyze effiency of a program, comand `top`, Profilng tool...
6. communication between threads, and if lock is not allowed
7. If a program crashes, what's the step you will take
    -if you cannot reproduce problems
    -if finding nothing in logs
7-1. **Core dump:**
A core dump is a file containing the memory image of a process at the time it crashed. It can be analyzed to understand the state of the process just <u>before the crash.</u>
By default, core dumps may be disabled or have size limits. To enable them, you can use the ulimit command. For unlimited size, run: `ulimit -c unlimited`
Core dump location:`/proc/sys/kernel/core_pattern`
Analyze: `gdb /path/to/executable /path/to/coredump`
7-2. **System Logs**:
Linux's system logging daemon, syslogd, captures system messages and errors. These logs can provide insights into what was happening on the system at the <u>time of a crash.</u>
<u>Check System Logs</u>: Common locations for system logs include /var/log/syslog, /var/log/messages, and /var/log/kern.log. You can use grep or other text processing tools to search these logs for error messages related to the crash.
7-3. **Automated Crash Report Tools**
`apport` on Ubuntu or `abrt` on CentOS

8. constexpr: 
constexpr specifies that the value of a **variable** or **function** can be evaluated **at compile time**. This is useful for optimizing performance by performing calculations during compilation rather than at runtime
8-1:
```constexpr double PI = 3.14159265358979323846;```
8-2:
A constexpr function is executed at compile time if its arguments are all constant expressions.
```
constexpr double areaOfCircle(double radius) {
    return PI * radius * radius;
}

int main() {
    constexpr double radius = 5.0;
    constexpr double area = areaOfCircle(radius);
    cout << areaOfCircle(radius);
}
```


Profiling工具：

gprof：GNU Profiler，用于分析C/C++程序的CPU利用率。
perf：Linux内核性能分析工具，可用于检查CPU和内存性能。
Valgrind：提供内存分析、CPU利用率分析和其他性能分析工具，可用于检测内存泄漏、无效内存访问和缓存问题。
性能监控工具：

top 和 htop：Linux系统中的命令行工具，用于监视进程的CPU和内存利用率。
Windows性能监视器：在Windows系统中，可以使用性能监视器来监视CPU、内存、磁盘和网络性能。
sar：系统性能分析报告工具，可用于生成系统性能的历史数据。
代码分析工具：

Clang Static Analyzer：用于检查C/C++代码中的潜在问题，如内存泄漏、空指针解引用等。
Coverity Scan：自动化的静态代码分析工具，可用于检测代码中的缺陷。
CodeSonar：高级静态分析工具，可用于识别潜在的安全漏洞和性能问题。
可视化工具：

Flame Graphs：用于可视化程序的函数调用和CPU利用率，帮助识别性能瓶颈。
Chrome DevTools：浏览器开发工具中的性能分析工具，用于分析Web应用程序的性能。
Vtune Amplifier：英特尔的性能分析工具，可用于分析CPU和内存性能。
分布式性能分析工具：

Distributed Tracing工具：如Zipkin、Jaeger和OpenTelemetry，用于跟踪分布式应用程序的性能问题。
Prometheus：用于监视和告警分布式系统性能的开源监控工具。
数据库性能工具：

pgBadger：用于PostgreSQL数据库的性能分析工具。
MySQL Performance Schema：用于MySQL数据库的性能分析工具。
GPU性能分析工具：

NVIDIA Nsight：用于GPU性能分析和调试的工具，适用于NVIDIA GPU。
RenderDoc：用于图形API性能分析和调试的工具。


cas compare and swap