Linux下为什么在编译时指定了动态库路径但为什么还要先将动态库复制到/lib/下面

linux下编译
gcc main.c -o main -L./ -lfunc

为什么在编译之前要将动态库文件libfunc.so 先复制到/lib/下面,我不是在编译时已经指定了链接动态库shi所在的路径了吗,如果必须得将动态库放到/lib/下面那指定路径还有什么意义?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Linux下将静态库编译成动态库的问题

使用JNI技术时,需要将第三方提供的静态库编译成动态库,在编译过程中遇到问题,使用gcc进行编译链接: gcc -I/home/jichenxiao/java/jdk1.8.0_11/include -I/home/jichenxiao/java/jdk1.8.0_11/include/linux -fPIC -shared -o libAir.so AirConditioner.c -L. -Wl,--whole-archive -lBLNetwork-linux-64 -Wl,--no-whole-archive -lpthread -lrt -lm 其中/home/jichenxiao/java/jdk1.8.0_11/include和/home/jichenxiao/java/jdk1.8.0_11/include/linux为jni.h和jni_md.h的路径,libAir.so为输出的动态库,AirConditioner.c为要一起编译的c程序,-lBLNetwork-linux-64为要编译成动态库的静态库文件libBLNetwork-linux-64.a。编译时报的错误为: /usr/bin/ld: ./libBLNetwork-linux-64.a(aes.o): relocation R_X86_64_32S against `.bss' can not be used when making a shared object; recompile with -fPIC ./libBLNetwork-linux-64.a(aes.o): error adding symbols: Bad value collect2: error: ld returned 1 exit status 我不懂编译原理,请教大家,希望大家能给出解决方案,谢谢!

linux 编译指定库、头文件的路径问题

急:用gfortran编译过程中,出现undefined reference to 'xxxxx'错误 找不到netcdf头文件所在的文件夹

linux开源软件的交叉编译去除主机路径信息。

我在交叉编译dbus库时发现,用./configure --prefix=/host/home/test重新指定了安装路径,但是由于我是交叉编译,我发现我把编译后的动态库放在板子上运行时,调用里面的函数竟然发现里面的路径是主机host上的编译路径,我想去掉host主机路径。但是如果不指定prefix,默认的为/var/run这样的系统路径,一旦make install 后直接会污染我的host,导致不能开机。所以,我想有没有什么方法,在主机上指定prefix编译后不带有主机路径信息的。多谢大神开导。

linux下给gcc添加头文件和库文件添加默认搜索路径

本人学linxu和编程没多久,很多问题不懂,请各路大神多多指教,感激不尽!!!! 今天在linux下用gcc编译器做了一个动态库(库文件名为libhot.so),库文件在 目录为“/usr/selflib/lib/libhot.so”,这个库的头文件和main1.c在一个目录里(本例子中就是当前目录下),然后就试了试这个库文件,写了一个main1.c文件来调用这个动态库文件中的函数,编译命令如下: gcc main1.c -L /usr/selflib/lib/libhot.so -o main1.o 编译通过了,没问题。但是我觉得这样太麻烦了,每次编译时还要指定动态库文件路径和名字,我知道可以通过编写makefile文件来解决这个问题,但是我还是觉得太麻烦,后来就想找一种方法来增加gcc编译器的头文件和库文件默认搜索路径,做到 gcc main1.c -o main.o 一条简单的命令就能搞定(不用设置环境变量,不用再次指定搜索路径,也不必通过编写makefie来解决),就行使用它的内部库一样那么轻松简单。后来试过了(修改ld.so.conf配置文件,然后以管理员身份运行ldconfig命令)这个方法,失败了,也知道了原因。那应该如何修改才能达到我的目的呢? 求大神们指教!!

linux动态库与静态库之间的调用问题

linux程序编译通过,运行时出错symbol lookup error: /usr/lib/libE.so: undefined symbol: test_D1 静态库libD.a中: 提供函数接口test_D(),test_D1(),test_D2() 动态库libE.so中:提供函数接口test_E() int test_E() { test_D(); return 0; } 应用程序make时,链接了动态库libE.so,将静态库libD.a编译进去了, 将应用程序和动态库libE.so下到开发板时程序运行正常。 现在修改动态库libE.so源码,头文件不变,将test_E()改为 int test_E() { test_D(); test_D1(); return 0; } 原来的应用程序不变,只将libE.so更新到开发板 为什么会出现上面的错误,该如何解决?? 求高手帮助!!!!!!!!!!!! 急!急!急!

linux cmake 动态库连接

各位老师, 我在cmake脚本中用 add_subdirectory 添加多个独立的程序和库项目一起编译。但有一个动态库是其他程序依赖的,如何保证这个库项目先被编译并且其他的项目可以连接这个动态库? 多谢!

linux下Qt编译库so文件

qt在linux编译后会产生四个so文件,so、so.1、so.1.0、so.1.0.0, 调用这个库时好像找的是so.1这个库。 问题1:如何让调用者找的是so这个库,然后再连接其他到实体库。 问题2:如何编译后只生成一个库文件,只要so.1.0.0。 谢谢!!!

g++编译动态库找不到.h文件中的方法接口

在vs 2013里面写的代码,加入了source.def(加入方法A)编译动态库后能有方法A的接口,但单独利用g++进行动态库编译生成的话,不能找到方法A的接口,这是怎么回事呀

VS 2017 for Linux如何调试加载的动态库

gdbserver调试ubuntu上的程序,使用vs 2017编译直接F5调试 在可执行文件中添加断点是可以进行调试的。 但是对于动态库中的函数,F11没法进入到动态库所在的模块进行调试。 在动态库中添加断点,也提示“当前不会命中断点”,请问VS2017该怎样设置才能调试动态库中的函数?

linux下so动态链接库找不到函数符号问题

大型嵌入式软件开发,静态库和动态库同时使用,部分.c文件和.c++文件由于bin超大会编译成动态库,在编译链接时无任何错误,但是实际运行时经常发现某些函数符号找不到,由于动态链接库只有可执行程序真正运行时才会加载相关符号表,有经验的大侠有没有好的方法和经验,提供一个好的方法,可以在实际运行前发现相关“编译”错误,急等。~

linux下的c++与lua交互编译的问题

![图片说明](https://img-ask.csdn.net/upload/201706/14/1497420001_675266.png) makefile ``` .SUFFIXES: .cpp .o .PHONY: clean all CC = g++ CFLAGS = -Wall -g LIBS = -lpthread -std=c++11 -l /usr/include/lua5.1/ -llua5.1 SRCS = lua.cpp OBJS = $(SRCS:.cpp=.o) EXEC = lua $(EXEC):$(OBJS) $(CC) $(CFLAGS) $^ -o $@ $(LIBS) %o:%.cpp $(CC) $(CFLAGS) -c $< -o $@ clean: rm -rf *.o $(EXEC) ``` 路径信息: ``` root@wangpeng:/home/wp01/lua# locate lua.h /usr/include/lua5.1/lua.h /usr/include/lua5.1/lua.hpp /usr/src/linux-headers-4.4.0-78-generic/include/config/scsi/dh/alua.h /usr/src/linux-headers-4.4.0-79-generic/include/config/scsi/dh/alua.h /usr/lib/x86_64-linux-gnu/liblua5.1-c++.a /usr/lib/x86_64-linux-gnu/liblua5.1-c++.so /usr/lib/x86_64-linux-gnu/liblua5.1-c++.so.0 /usr/lib/x86_64-linux-gnu/liblua5.1-c++.so.0.0.0 /usr/lib/x86_64-linux-gnu/liblua5.1-iconv.so.0 /usr/lib/x86_64-linux-gnu/liblua5.1-iconv.so.0.0.0 /usr/lib/x86_64-linux-gnu/liblua5.1-lpeg.so.2 /usr/lib/x86_64-linux-gnu/liblua5.1-lpeg.so.2.0.0 /usr/lib/x86_64-linux-gnu/liblua5.1-rrd.a /usr/lib/x86_64-linux-gnu/liblua5.1-rrd.so /usr/lib/x86_64-linux-gnu/liblua5.1-rrd.so.0 /usr/lib/x86_64-linux-gnu/liblua5.1-rrd.so.0.0.0 /usr/lib/x86_64-linux-gnu/liblua5.1.a /usr/lib/x86_64-linux-gnu/liblua5.1.so /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 /usr/lib/x86_64-linux-gnu/liblua5.1.so.0.0.0 ``` 最后编译的时候显示无法找到与lua相关的.h文件,解决方法是什么。。。大神来指导一下

ubuntu12.04下 opencv库交叉编译后 动态库找不到

ubuntu上我装了pc 和arm 两个版本的opencv2.4.9 目录分别是/usr/local/opencv2.4.9 和/opt/opencv2.4.9-for-arm pc版本的库文件都在/usr/local/lib下 arm版本库文件在/opt/opencv2.4.9-for-arm/lib下 whereis libopencv___core 的时候,只列出的/usr/local/lib/libopencv_core.so 交叉编译器在/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin下 我写一个opencv测试程序test.cpp 交叉编译出现警告 ``` # arm-linux-g++ -o test test.cpp -I /opt/opencv2.4.9-for-arm/lib/include -L /opt/opencv2.4.9-for-arm/lib -lopencv_core -lopencv_highgui -lpthread -lrt In file included from /opt/opencv2.4.9-for-arm/lib/include/opencv2/flann/kmeans_index.h:50:0, from /opt/opencv2.4.9-for-arm/lib/include/opencv2/flann/all_indices.h:38, from /opt/opencv2.4.9-for-arm/lib/include/opencv2/flann/flann_base.hpp:44, from /opt/opencv2.4.9-for-arm/lib/include/opencv2/flann/flann.hpp:50, from /opt/opencv2.4.9-for-arm/lib/include/opencv/cv.h:69, from test.cpp:2: /opt/opencv2.4.9-for-arm/lib/include/opencv2/flann/logger.h:73:9: note: the mangling of 'va_list' has changed in GCC 4.4 /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/../lib/gcc/arm-fsl-linux-gnueabi/4.6.2/../../../../arm-fsl-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /opt/opencv2.4.9-for-arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link) /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/../lib/gcc/arm-fsl-linux-gnueabi/4.6.2/../../../../arm-fsl-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /opt/opencv2.4.9-for-arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link) root@tsie-All-Series:/home/tsie/nfs/test/opencv_test# whereis libopencv_core libopencv_core: /usr/local/lib/libopencv_core.so ``` 这里面好像用到交叉编译器的ld,找opencv的.so文件看提示是跑到交叉编译器所在文件夹里面的lib去找?? 我也吧opencv的交叉库放到这个文件夹里面,再编译还是同样的问题 然后我尝试加上运行时库路径参数 -Wl,-rpath,/opt/opencv2.4.9-for-arm/lib,再编译,弹出来一样的信息。 然后,就没有然后了。我晕 这究竟谁什么问题啊 求各路大神给点思路

linux下的动态库问题。。。

``` [wangpeng@YunChanPinXian day06]$ ls io io.cpp io.o makefile [wangpeng@YunChanPinXian day06]$ ldd io linux-vdso.so.1 => (0x00007fff9193f000) libboost_system.so.1.53.0 => not found libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f5fb9464000) libm.so.6 => /lib64/libm.so.6 (0x00000036edc00000) libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f5fb924f000) libc.so.6 => /lib64/libc.so.6 (0x00000036ecc00000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036ed000000) /lib64/ld-linux-x86-64.so.2 (0x00000036ec800000) [wangpeng@YunChanPinXian day06]$ ``` makefile中指定路径 ``` CC = g++ CFLAGS = -Wall -g LIBS = -std=c++11 -lboost_system -I/home/wangpeng/mjf/lib/include -L/home/wangpeng/mjf/lib/lib #-L/home/wangpeng/wangpengworked/work_space/lib/lib -levent SRCS = io.cpp OBJS = $(SRCS:.cpp=.o) BIN = io $(BIN):$(OBJS) $(CC) $(CFLAGS) $^ -o $@ $(LIBS) %.o:%.cpp $(CC) $(CFLAGS) -c $< -o $@ $(LIBS) ``` 动态库 [wangpeng@YunChanPinXian lib]$ pwd /home/wangpeng/mjf/lib/lib [wangpeng@YunChanPinXian lib]$ ls libboost_atomic.a libboost_filesystem.so libboost_math_c99f.so.1.53.0 libboost_math_tr1.so.1.53.0 libboost_regex.so libboost_thread.so.1.53.0 libboost_atomic.so libboost_filesystem.so.1.53.0 libboost_math_c99l.a libboost_prg_exec_monitor.a libboost_regex.so.1.53.0 libboost_timer.a libboost_atomic.so.1.53.0 libboost_graph.a libboost_math_c99l.so libboost_prg_exec_monitor.so libboost_serialization.a libboost_timer.so libboost_chrono.a libboost_graph.so libboost_math_c99l.so.1.53.0 libboost_prg_exec_monitor.so.1.53.0 libboost_serialization.so libboost_timer.so.1.53.0 libboost_chrono.so libboost_graph.so.1.53.0 libboost_math_c99.so libboost_program_options.a libboost_serialization.so.1.53.0 libboost_unit_test_framework.a libboost_chrono.so.1.53.0 libboost_iostreams.a libboost_math_c99.so.1.53.0 libboost_program_options.so libboost_signals.a libboost_unit_test_framework.so libboost_context.a libboost_iostreams.so libboost_math_tr1.a libboost_program_options.so.1.53.0 libboost_signals.so libboost_unit_test_framework.so.1.53.0 libboost_context.so libboost_iostreams.so.1.53.0 libboost_math_tr1f.a libboost_python.a libboost_signals.so.1.53.0 libboost_wave.a libboost_context.so.1.53.0 libboost_locale.a libboost_math_tr1f.so libboost_python.so libboost_system.a libboost_wave.so libboost_date_time.a libboost_locale.so libboost_math_tr1f.so.1.53.0 libboost_python.so.1.53.0 libboost_system.so libboost_wave.so.1.53.0 libboost_date_time.so libboost_locale.so.1.53.0 libboost_math_tr1l.a libboost_random.a libboost_system.so.1.53.0 libboost_wserialization.a libboost_date_time.so.1.53.0 libboost_math_c99.a libboost_math_tr1l.so libboost_random.so libboost_test_exec_monitor.a libboost_wserialization.so libboost_exception.a libboost_math_c99f.a libboost_math_tr1l.so.1.53.0 libboost_random.so.1.53.0 libboost_thread.a libboost_wserialization.so.1.53.0 libboost_filesystem.a libboost_math_c99f.so libboost_math_tr1.so libboost_regex.a libboost_thread.so [wangpeng@YunChanPinXian lib]$

编译安装gcc后,新的gcc仍调用原有gcc的动态库,怎么解决?

您好,我在linux系统(自带有gcc)的机器上下载了gcc源码,编译并安装成功,安装路径区别于系统自带安装的gcc路径,新的gcc可以正常编译我写的测试程序,但是,我用ldd hello.out发现hello.out调用的还是原来的.so共享库,没使用新安装的gcc库,我配置了LD_LIBRARY_PATH变量为新gcc路径,但使用ldd hello.out发现还是调用原有gcc so库文件,怎样使新安装的gcc调用自己安装目录下的so库文件呢?

arm-fsl-linux-gnueabi-gcc 交叉编译工具链不能正常链接库

1. 使用gcc -o simplescan simplescan.c -lbluetooth 可以编译程序。 2. arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -lbluetooth 这样编译程序时提示找不头文件。 3. arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -I/usr/include/ -I/usr/include/i386-linux-gnu 手动设置头文件路径后,提示找不到库 /opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/../lib/gcc/arm-fsl-linux-gnueabi/4.6.2/../../../../arm-fsl-linux-gnueabi/bin/ld: cannot find -lbluetooth collect2: ld returned 1 exit status 4. 手动指定库路径编译 arm-fsl-linux-gnueabi-gcc -o simplescan simplescan.c -I/usr/include/ -I/usr/include/i386-linux-gnu -L/usr/lib/i386-linux-gnu 编译提示 simplescan.c:(.text+0x84): undefined reference to `hci_get_route' simplescan.c:(.text+0x90): undefined reference to `hci_open_dev' simplescan.c:(.text+0x11c): undefined reference to `hci_inquiry' simplescan.c:(.text+0x170): undefined reference to `ba2str' simplescan.c:(.text+0x1c8): undefined reference to `hci_read_remote_name' collect2: ld returned 1 exit status 5.使用arm-fsl-linux-gnueabi-nm -D bluetooth_build/lib/libbluetooth.so.3.13.0 查看库里函数,函数也存在。 000061e8 T hci_get_route 000063bc T hci_inquiry 00006ab4 T hci_le_add_white_list 00006c90 T hci_le_clear_white_list 00008ca0 T hci_le_conn_update 00008b44 T hci_le_create_conn 00006c04 T hci_le_read_white_list_size 00006b5c T hci_le_rm_white_list 00008ac8 T hci_le_set_advertise_enable 00008988 T hci_le_set_scan_enable 00008a10 T hci_le_set_scan_parameters 00005bd0 T hci_lmtostr 00005b98 T hci_lptostr 00006520 T hci_open_dev 这是什么情况? # 补充问题: 其实我的bluetooth的链接也已经编译了,使用-L指向我的链接库时,也是提示没有那些函数。 因为gcc编译可以通过,我就想着链接一下gcc用的动态库看可不可以通过。结果还是一样的。 所以百思不得其解。找不到要往哪个方向查了。 使用nm 对比了i386的蓝牙库和用交叉工具编译的蓝牙库,有没太大的差异 这是我的库 file work/bluetooth/bluetooth_build/lib/libbluetooth.so.3.13.0 work/bluetooth/bluetooth_build/lib/libbluetooth.so.3.13.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

linux下x264编译过程中出现的问题

在编译的时候出现 : undefined reference to 'x264 _encoder_open_122’ ,但是已经编译时包含了 -lx264,求大神指点迷津。

linux下编译的Qt程序如何加载输入法插件。

windows中编译的Qt程序启动时会加载相同目录下的platforminputcontexts文件件内的输入法插件,故将编译的出入法动态库 文件放到该位置就可加载,那么linux系统中有没有类似的用法。

makefile把一个 .cpp文件和它所依赖的几个 .a(静态库文件 ) 生成一个动态库文件.so

假设编译交叉编译工具路径为dir1(arm-linux-androideabi-gcc-4.9 ),存放生成的.so文件的路径为dir2,test.cpp,依赖1.a,2.a,3.a这三个静态文件库,Makefile文件应该怎么写

linux使用clion进行c++和python的交叉编译,无法导入python的第三方库

在ubuntu14.04下使用clion进行c++调用python编写的模块,当python中import第三方库(如numpy时),出现错误。具体如下: 这是我的代码: cmakelist: ``` cmake_minimum_required(VERSION 3.5) project(image_pretreat) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -util -ldl -pthread") # 添加Python.h头文件路径 include_directories(/home/neil/.pyenv/versions/3.6.4/include/python3.6m) # 添加python动态链接库文件目录 link_directories(/home/neil/.pyenv/versions/3.6.4/lib/python3.6/config-3.6m-x86_64-linux-gnu) set(SOURCE_FILES main.cpp) add_executable(image_pretreat ${SOURCE_FILES}) # 依赖库文件 target_link_libraries(image_pretreat libpython3.6m.a) target_link_libraries(image_pretreat ${CMAKE_DL_LIBS}) target_link_libraries(image_pretreat util) ``` main函数 ``` #include <Python.h> #include <iostream> using namespace std; int main() { Py_Initialize(); //声明python对象(模型、函数、参数、返回值) PyObject *pModule, *pFunction, *pArgs, *pRetValue; PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('/home/neil/ClionProjects/image_pretreat')"); //调用python模块 pModule = PyImport_ImportModule("test123"); if (!pModule) { printf("import python failed!!\n"); return -1; } //调用python模块中的函数 pFunction = PyObject_GetAttrString(pModule, "add"); if (!pFunction) { printf("get python function failed!!!\n"); return -1; } //新建python元组对象 pArgs = PyTuple_New(2); PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 1)); PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 2)); int r1,r2; r1=r2=0; pRetValue=PyObject_CallObject(pFunction, pArgs); PyArg_ParseTuple(pRetValue, "i|i", &r1, &r2); printf("%d,%d",r1,r2); //关闭 Python 脚本解释器 Py_Finalize(); return 0; } ``` Python模块 ``` import numpy as np def add(a,b): return a+b,a-b ``` 报错: import python failed!! Process finished with exit code 255 已采取方法: 1、将python3.6各个路径都包含进了PYTHONPATH和PYTHONHOME环境变量 2、主函数中手动设置py_SetPythonhome函数

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐