LidarView源码分析(一)源码组织概览

LidarView源码组织结构

Application:界面程序。内容比较简单,主要定义了界面的主框架,然后使用ParaView相关的功能进行初始化。

LVCore:核心功能及插件。包含LidarView的数据源,滤波器等插件代码。

整个程序是使用ParaView开发模式。显示界面只是个框架,主要功能结构是使用插件的形式实现的。

源代码目录树如下:

├─Application
│  ├─Icons
│  ├─SoftwareInformation
│  └─Ui
│      ├─python
│      │  └─lidarview
│      └─Widgets
│          └─images
├─CMake
├─LVCore
│  ├─CI
│  ├─CMake
│  │  └─scripts
│  ├─Documentation
│  ├─LidarCore
│  │  ├─Common
│  │  │  ├─Ceres
│  │  │  ├─Core
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─OpenCV
│  │  │  └─PCL
│  │  ├─Filters
│  │  │  ├─Calibration
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─Camera
│  │  │  ├─CameraOpenCV
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─Processing
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─ProcessingPCL
│  │  │  ├─Segmentation
│  │  │  ├─Selection
│  │  │  ├─Temporal
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  └─Visualization
│  │  ├─IO
│  │  │  ├─CameraOpenCV
│  │  │  ├─Core
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─General
│  │  │  ├─Geolocation
│  │  │  │  └─Testing
│  │  │  │      └─Cxx
│  │  │  ├─Lidar
│  │  │  └─Network
│  │  ├─Sources
│  │  ├─Testing
│  │  │  └─Core
│  │  └─Utilities
│  │      ├─PCAPTools
│  │      └─UsedModules
│  ├─Plugins
│  │  ├─DatasetIOPlugin
│  │  │  └─KittiIO
│  │  └─LidarCorePlugin
│  │      ├─Filters
│  │      ├─IO
│  │      └─Sources
│  ├─Python
│  │  ├─lidarviewcore
│  │  │  └─DTMFilter
│  │  └─lidarviewpythonplugin
│  │      └─filters
│  ├─Qt
│  │  ├─ApplicationComponents
│  │  │  └─Resources
│  │  │      ├─Icons
│  │  │      └─UI
│  │  ├─Components
│  │  │  └─Resources
│  │  │      └─UI
│  │  └─Core
│  ├─Testing
│  │  ├─Data
│  │  │  ├─Baseline
│  │  │  ├─Camera
│  │  │  │  ├─BrownConrady
│  │  │  │  └─MatchedPoints_3D_2D
│  │  │  ├─Slam
│  │  │  └─trajectories
│  │  │      ├─la_doua_dataset
│  │  │      ├─mm03
│  │  │      ├─mm04
│  │  │      └─mm05_reoptimization
│  │  └─XML
│  └─Utilities
│      ├─Animation
│      │  ├─doc
│      │  ├─examples
│      │  └─lib
│      ├─Examples
│      │  ├─pipeline_setup_helpers
│      │  └─ProcessingSample
│      └─Scripts
├─LVSuperbuild
│  ├─cmake
│  ├─Documentation
│  ├─projects
│  │  ├─apple
│  │  │  └─files
│  │  ├─scripts
│  │  ├─unix
│  │  └─win32
│  ├─pvsb
│  │  ├─.gitlab
│  │  │  └─ci
│  │  │      └─docker
│  │  │          ├─centos7
│  │  │          └─fedora36
│  │  ├─cmake
│  │  │  └─sites
│  │  ├─Documentation
│  │  │  ├─dev
│  │  │  │  └─git
│  │  │  └─img
│  │  ├─launchers
│  │  ├─projects
│  │  │  ├─apple
│  │  │  │  ├─files
│  │  │  │  └─scripts
│  │  │  ├─apple-unix
│  │  │  │  └─patches
│  │  │  ├─files
│  │  │  ├─patches
│  │  │  ├─scripts
│  │  │  │  └─apple
│  │  │  ├─unix
│  │  │  │  └─patches
│  │  │  └─win32
│  │  │      ├─patches
│  │  │      └─scripts
│  │  ├─Scripts
│  │  │  ├─docker
│  │  │  │  ├─el6
│  │  │  │  └─ubuntu
│  │  │  │      ├─development
│  │  │  │      └─runtime
│  │  │  ├─index
│  │  │  ├─singularity
│  │  │  └─sites
│  │  │      └─modulefiles
│  │  │          └─dod_hpc
│  │  │              └─catalyst
│  │  ├─superbuild
│  │  │  ├─.gitlab
│  │  │  │  └─ci
│  │  │  │      └─docker
│  │  │  │          └─fedora36
│  │  │  ├─cmake
│  │  │  │  ├─patches
│  │  │  │  │  └─ExternalProject
│  │  │  │  └─scripts
│  │  │  ├─projects
│  │  │  │  ├─apple
│  │  │  │  ├─apple-unix
│  │  │  │  │  ├─patches
│  │  │  │  │  └─scripts
│  │  │  │  ├─patches
│  │  │  │  ├─scripts
│  │  │  │  ├─unix
│  │  │  │  │  └─patches
│  │  │  │  └─win32
│  │  │  │      ├─patches
│  │  │  │      └─scripts
│  │  │  ├─selftest
│  │  │  │  └─tests
│  │  │  │      ├─mpi-check
│  │  │  │      ├─sqlite-check
│  │  │  │      └─tbb-check
│  │  │  ├─standalone-boost
│  │  │  └─standalone-qt
│  │  ├─tests
│  │  │  ├─baselines
│  │  │  ├─data
│  │  │  ├─python
│  │  │  └─xml
│  │  └─Utilities
│  │      ├─build-mesa
│  │      ├─GitSetup
│  │      └─Scripts
│  └─tests
│      ├─baselines
│      ├─data
│      ├─python
│      └─xml
└─Plugins
    ├─HesaiPlugin
    │  ├─CalibrationFiles
    │  ├─HesaiPacketInterpreters
    │  ├─HesaiSDK
    │  │  └─sources
    │  └─Utilities
    └─VelodynePlugin
        ├─CalibrationFiles
        ├─Filters
        ├─Testing
        │  └─Data
        │      ├─HDL-128
        │      │  └─GroundTruth
        │      ├─HDL-64_Dual
        │      │  └─GroundTruth
        │      ├─HDL-64_Dual-autocalib
        │      │  └─GroundTruth
        │      ├─HDL-64_Single
        │      │  └─GroundTruth
        │      ├─HDL-64_Single-autocalib
        │      │  └─GroundTruth
        │      ├─VLP-16_Dual
        │      │  └─GroundTruth
        │      ├─VLP-16_Single
        │      │  └─GroundTruth
        │      ├─VLP-32c_Dual
        │      │  └─GroundTruth
        │      └─VLP-32c_Single
        │          └─GroundTruth
        ├─Utilities
        ├─VelodynePacketInterpreters
        └─VelodynePositionPacketInterpreters

顶层的CMakeLists.txt文件比较简单,调用了一些写好的模块,然后添加子文件Application以及LVCore。

cmake_minimum_required(VERSION 3.20.3 FATAL_ERROR)
project(LidarView)

# Add path to get all the needed modules used to config Lidarview
# lidarview_cmake_dir=E:/repo_lv/lidarview/src/CMake
set(lidarview_cmake_dir "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
set(lvcore_cmake_dir "${CMAKE_CURRENT_SOURCE_DIR}/LVCore/CMake")
if (NOT IS_DIRECTORY "${lvcore_cmake_dir}")
  message(FATAL_ERROR
    "Failed to find the LVCore CMake directory. Did you forget to initialize the "
    "submodule? (git submodule update --init --recursive)")
endif ()
list(APPEND CMAKE_MODULE_PATH
  "${lidarview_cmake_dir}"
  "${lvcore_cmake_dir}")

include(SetBranding) # 设置软件名称,供应商以及图标等信息
include(LidarViewSupportMacros) # 定义了两个函数,用于处理已经废弃不用的旧变量
include(LidarViewOptions) # 调用了LidarViewSupportMacros中的函数,对velodyne和hesai相关的变量进行了说明

# 检查SOFTWARE_NAME是否定义
# CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_BINARY_DIR,两个变量不能相等
# 构建目录和源码目录不能相等
# CMAKE_BUILD_TYPE 如果没有定义,则赋值为RelWithDebInfo
# include(ParaViewDeterminVersion)
# include(FindLidarViewDependencies)
# include(SetupOutputDirs)
include(SetupLidarviewProject)

# Add plugins to be searched by default in LVCore CMakeLists.txt
set(lidarview_default_plugins
  VelodynePlugin
  HesaiPlugin)
set(lidarview_plugin_directories
  "${CMAKE_CURRENT_SOURCE_DIR}/Plugins")
add_subdirectory(LVCore)

add_subdirectory(Application)

LVCore

LVCore对LidarView的功能模块进行了构建,包括输入输出,滤波器,界面相关的功能模块等等。

其CMakeLists.txt中首先使用paraview_plugin_find_plugins查找插件的paraview.plugin文件,然后使用paraview_plugin_scan进行扫描,生成可用插件列表(保存在变量lidarview_plugins中),接着使用vtk_module_find_modules查找vtk模块,其结果保存在变量lidarplugin_module_files中,然后使用vtk_module_scan对vtk模块的相关源码进行查找,使用vtk_module_build进行插件构建。最后使用paraview_plugin_build构建LidarView插件。

其CMakeLists.txt文件如下:

#--------------------------------------
# Set-up lvcore test & cmake variables
#--------------------------------------
set(lidarview_cmake_destination "${CMAKE_INSTALL_LIBDIR}/cmake/lidarview")
set(lidarview_test_data_directory_input "${CMAKE_CURRENT_SOURCE_DIR}/Testing/Data")
set(lidarview_test_data_directory_output "${lidarview_test_data_directory_input}")
set(lidarview_test_output_directory "${CMAKE_BINARY_DIR}/Testing/Temporary")

#--------------------------------------
# Scan LidarView plugins
#--------------------------------------

# Retrieve default plugin and plugin directories
# from LidarView based app if existing
list(APPEND lidarview_default_plugins
  DatasetIOPlugin
  LidarCorePlugin)

list(APPEND lidarview_plugin_directories
  "${CMAKE_CURRENT_SOURCE_DIR}/Plugins/")

foreach (lidarview_default_plugin IN LISTS lidarview_default_plugins)
  set("_paraview_plugin_default_${lidarview_default_plugin}" "ON")
endforeach ()

# 查找插件文件的paraview.plugin文件
paraview_plugin_find_plugins(lidarview_plugin_files ${lidarview_plugin_directories})

# 扫描上插件,将可用插件保存在lidarview_plugins中
paraview_plugin_scan(
  PLUGIN_FILES
    ${lidarview_plugin_files}
  PROVIDES_PLUGINS  lidarview_plugins # 可用插件列表
  REQUIRES_MODULES  lidarview_plugin_required_modules)

#--------------------------------------
# Scan and find vtk modules
#--------------------------------------
list(APPEND lidarview_source_directories
  "${CMAKE_CURRENT_SOURCE_DIR}/LidarCore"
  "${CMAKE_CURRENT_SOURCE_DIR}/Qt"
)

vtk_module_find_modules(lidarplugin_module_files ${lidarview_source_directories})

vtk_module_scan(
  MODULE_FILES          ${lidarplugin_module_files}
  REQUEST_MODULES       ${lidarview_plugin_required_modules}
                        ${lidarview_client_required_modules}
  PROVIDES_MODULES      lidarview_modules
  REQUIRES_MODULES      lidarview_required_modules
  UNRECOGNIZED_MODULES  lidarview_unrecognized_modules
  WANT_BY_DEFAULT       "${LIDARVIEW_BUILD_ALL_MODULES}"
  ENABLE_TESTS          "${BUILD_TESTING}")

set(lidarview_unrecognized_lidarview_modules)
foreach (lidarview_module IN LISTS lidarview_unrecognized_modules)
  if (lidarview_module MATCHES "LidarView::")
    list(APPEND lidarview_unrecognized_lidarview_modules
      "${lidarview_module}")
  endif ()
endforeach ()

if (lidarview_unrecognized_lidarview_modules)
  list(REMOVE_ITEM lidarview_unrecognized_lidarview_modules ${lidarview_rejected_modules})
endif ()

if (lidarview_unrecognized_lidarview_modules)
  message(FATAL_ERROR
    "The following modules were requested or required, but not found: "
    "${lidarview_unrecognized_lidarview_modules}.")
endif ()

#--------------------------------------
# Build LidarView vtk modules
#--------------------------------------
vtk_module_build(
  MODULES                   ${lidarview_modules}
  INSTALL_EXPORT            LidarView
  INSTALL_HEADERS           "${LIDARVIEW_INSTALL_DEVELOPMENT_FILES}"
  HEADERS_DESTINATION       "${CMAKE_INSTALL_INCLUDEDIR}/lidarview"
  CMAKE_DESTINATION         "${lidarview_cmake_destination}"
  LICENSE_DESTINATION       "${CMAKE_INSTALL_LICENSEDIR}"
  VERSION                   "${LV_VERSION}"
  SOVERSION                 "1"
  ENABLE_WRAPPING           ON
  TEST_INPUT_DATA_DIRECTORY   "${lidarview_test_data_directory_input}"
  TEST_OUTPUT_DATA_DIRECTORY  "${lidarview_test_data_directory_output}"
  TEST_OUTPUT_DIRECTORY       "${lidarview_test_output_directory}")

#--------------------------------------
# Build LidarView plugins
#--------------------------------------
foreach (module IN LISTS lidarview_plugin_required_modules)
  if (NOT TARGET "${module}")
    message(FATAL_ERROR "Missing required module: ${module}")
  endif ()
endforeach ()

set(autoload_plugins)

foreach (lidarview_plugin IN LISTS lidarview_plugins)
  option("PARAVIEW_PLUGIN_AUTOLOAD_${lidarview_plugin}" "Autoload the ${lidarview_plugin} plugin" ON)
  mark_as_advanced("PARAVIEW_PLUGIN_AUTOLOAD_${lidarview_plugin}")

  if (PARAVIEW_PLUGIN_AUTOLOAD_${lidarview_plugin})
    list(APPEND autoload_plugins
      "${lidarview_plugin}")
  endif ()
endforeach ()

paraview_plugin_build(
  HEADERS_DESTINATION   "${CMAKE_INSTALL_INCLUDEDIR}/lidarview"
  RUNTIME_DESTINATION   "${CMAKE_INSTALL_BINDIR}"
  LIBRARY_DESTINATION   "${CMAKE_INSTALL_LIBDIR}"
  LIBRARY_SUBDIRECTORY  "lidarview/plugins"
  CMAKE_DESTINATION     "${lidarview_cmake_destination}"
  PLUGINS_FILE_NAME     "lidarview.plugins.xml"
  TARGET                LidarView::lidarview_plugins
  INSTALL_EXPORT        LidarViewPlugins
  INSTALL_HEADERS       "${LIDARVIEW_INSTALL_DEVELOPMENT_FILES}"
  TARGET_COMPONENT      "development"
  PLUGINS_COMPONENT     "plugins"
  PLUGINS               ${lidarview_plugins}
  AUTOLOAD              ${autoload_plugins})

#-----------------------------------------------------------------------------
# Python wrapping
# Simply use "import lidarview.modules" and you have acces to the wrapped c++ code
# DO NOT FOR ANY REASON USE the method GetClientSideObject() to have acces to the vtkObject directly.
#-----------------------------------------------------------------------------

vtk_module_wrap_python(
  MODULES             ${lidarview_modules}
  INSTALL_EXPORT      LidarViewPython
  INSTALL_HEADERS     "${LIDARVIEW_INSTALL_DEVELOPMENT_FILES}"
  CMAKE_DESTINATION   "${lidarview_cmake_destination}"
  LIBRARY_DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  HEADERS_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lidarview/lvpythonmodules"
  PYTHON_PACKAGE      "lidarview.modules"
  MODULE_DESTINATION  "${LIDARVIEW_PYTHON_SITE_PACKAGES_SUFFIX}"
  TARGET              LidarView::lvpythonmodules
  DEPENDS             VTK::vtkpythonmodules
)

add_subdirectory(Python)

#--------------------------------------
# Build non-plugin/modules LidarView source code
# (This should be progressively removed)
#--------------------------------------
# Add subdirectory containing python script for animation
add_subdirectory(Utilities/Animation)
# Add sudbirectory containing python helper functions for pipeline scripting
add_subdirectory(Utilities/Examples)

#--------------------------------------
# Build Python & UI XML Testing
#--------------------------------------
if (BUILD_TESTING)
  add_subdirectory(Testing)
endif ()

Application

applicatoin中是LidarView主界面的框架。其中的Ui文件夹中定义了一些其他的界面元素。主界面程序中会使用一些LVCore中的代码,因此先编译的是LVCore。其CMakeLists.txt如下:

# Sanitize checks
if(NOT SOFTWARE_NAME OR NOT SOFTWARE_VENDOR)
  message(FATAL_ERROR "SOFTWARE_NAME or SOFTWARE_VENDOR branding not set")
endif()
if(NOT LV_VERSION_FULL)
  message(FATAL_ERROR "LV_VERSION_ variables not set")
endif()

add_subdirectory(Ui)

# Qt编译选项
set(CMAKE_AUTOMOC ON) # 将Qt功能转换成标准C++代码,如信号槽的转换
set(CMAKE_AUTORCC ON) # Qt资源文件处理
set(CMAKE_AUTOUIC ON) # Qt界面文件处理

# 添加源代码,其中Qt相关的会自动处理,因此统一作为源代码
set(source_files
  vvMainWindow.h
  vvMainWindow.ui
  vvResources.qrc
  vvMainWindow.cxx
  vvMainWindow.h
)

# Please make sure to adapt the AboutDialog text in the followin file
#  Lidar\python\lidarview\aboutDialog.py
# You also need to change:
#   - bottom_logo.png (bottom logo)

set(plugins_targets
  ParaView::paraview_plugins
  LidarView::lidarview_plugins
)

if (PARAVIEW_PLUGIN_ENABLE_LidarSlam)
  list(APPEND plugins_targets LidarSlam::paraview_wrapping)
endif ()

# paraview客户端
paraview_client_add(
  NAME              LidarView # 应用程序的名称,同时也是cmake目标变量
  NAMESPACE         "LidarView" # 为该程序提供了LidarView::LidarView的别名目标变量
  EXPORT            "LidarViewClient" # 导出目标
  VERSION           ${LV_VERSION_FULL} # 版本号
  APPLICATION_NAME  "LidarView" # 应用程序显示的名称,
  ORGANIZATION      "${SOFTWARE_VENDOR}"
  TITLE             "${SOFTWARE_NAME} ${LV_VERSION_FULL} ${LV_BUILD_PLATFORM}" # 窗口上显示的标题
  SPLASH_IMAGE      "${CMAKE_CURRENT_SOURCE_DIR}/SoftwareInformation/Splash.jpg" # 打开程序时先会显示该图片
  BUNDLE_ICON       "${CMAKE_CURRENT_SOURCE_DIR}/logo.icns" # 图标,MaxOS
  APPLICATION_ICON  "${CMAKE_CURRENT_SOURCE_DIR}/SoftwareInformation/logo.ico" # 图标

  PLUGINS_TARGETS   ${plugins_targets} # 插件的目标变量,启动时会调用这些插件的关联函数
  REQUIRED_PLUGINS  PythonQtPlugin LidarCorePlugin # 启动时加载的插件

  MAIN_WINDOW_CLASS vvMainWindow # 主窗口类的名称
  MAIN_WINDOW_INCLUDE vvMainWindow.h # 主窗口类的头文件
  SOURCES ${source_files} # 源文件
  APPLICATION_XMLS # 服务管理器配置文件
    ${CMAKE_CURRENT_SOURCE_DIR}/lqSources.xml
    ${CMAKE_CURRENT_SOURCE_DIR}/lqFilters.xml

  RUNTIME_DESTINATION ${CMAKE_INSTALL_BINDIR} # 二进制文件存放目录
  LIBRARY_DESTINATION ${CMAKE_INSTALL_LIBDIR} # 库文件存放目录
)

target_include_directories(${SOFTWARE_NAME} # SOFTWARE_NAME = LidarView
  PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
)

target_link_libraries(${SOFTWARE_NAME}
  PRIVATE
    LidarView::lqApplicationComponents # Common LVCore code base
    ApplicationUi
)

# Bundle Icon on Apple
if(APPLE)
  get_target_property(MACOSX_BUNDLE_ICON_FILE ${SOFTWARE_NAME} MACOSX_BUNDLE_ICON_FILE)
  install(FILES ${MACOSX_BUNDLE_ICON_FILE} DESTINATION "${LV_INSTALL_RESOURCE_DIR}") # to install tree
endif()

其中paraview_clinet_add是关键代码,确定了paraview应用程序构建的相关信息,其参数如下:

paraview_client_add(
  NAME    
  VERSION 
  SOURCES ...
  [APPLICATION_XMLS ...]
  [QCH_FILES ...]

  [MAIN_WINDOW_CLASS    ]
  [MAIN_WINDOW_INCLUDE  ]

  [PLUGINS_TARGETS  ...]
  [REQUIRED_PLUGINS ...]
  [OPTIONAL_PLUGINS ...]

  [APPLICATION_NAME ]
  [ORGANIZATION     ]
  [TITLE            ]

  [DEFAULT_STYLE  <style>]

  [APPLICATION_ICON <icon>]
  [BUNDLE_ICON      <icon>]
  [BUNDLE_PLIST     <plist>]
  [SPLASH_IMAGE     <image>]

  [NAMESPACE            <namespace>]
  [EXPORT               <export>]
  [FORCE_UNIX_LAYOUT    <ON|OFF>]
  [BUNDLE_DESTINATION   <directory>]
  [RUNTIME_DESTINATION  <directory>]
  [LIBRARY_DESTINATION  <directory>]

  [TRANSLATE_XML           <ON|OFF>]
  [TRANSLATIONS_DIRECTORY  <directory>]
  [TRANSLATION_TARGET      <target>])</code></pre> 
  <p>编译一个客户端</p> 
  <p>NAME:必须项,指明了程序的名称,同时也是CMAKE的目标变量。</p> 
  <p>VERSION:必须项,程序的版本号。</p> 
  <p>SOURCE:必须项,此恒旭的源代码。</p> 
  <p>APPLICATION_XMLS:服务管理XML文件。</p> 
  <p>QCH_FILES:*.qch文件。</p> 
  <p>MAIN_WINDOW_CLASS:默认为QMainWinow,主界面的类名。</p> 
  <p>MAIN_WINDOW_INCLUDE:默认为QMainWindow,或者指定了MAIN_WINDOW_CLASS,则为<MAIN_WINDOW_CLASS>.h。主界面类的头文件名称。</p> 
  <p>PLUGINS_TARGETS:插件的目标变量,相关联的函数会在启动时被调用。</p> 
  <p>REQUIRED_PLUGINS:启动时加载的插件。</p> 
  <p>OPTIONAL_PLUGINS:这些插件如果可用,将在启动时加载。</p> 
  <p>APPLICATION_NAME:默认和为<NAME>,应用程序显示的名称。</p> 
  <p>ORGANIZATION:默认为“Anonymous”,应用程序的组织(公司)名称。在macOS中会作为GUI的标志。</p> 
  <p>TITLE:应用程序窗口显示的标题。</p> 
  <p>DEFAULT_STYLE:应用程序默认的Qt风格。</p> 
  <p>APPLICATION_ICON:应用程序图标的路径。</p> 
  <p>BUNDLE_ICON:macOS bundle图标的路径。</p> 
  <p>BUNDLE_PLIST:“info.plist.in”模板的路径</p> 
  <p>SPLASH_IMAGE:启动时显示的图片。</p> 
  <p>NAMESPACE:如果提供该参数,则会创建一个<NAMESPACE>::<NAME>的别名目标。</p> 
  <p>EXPORT:如果提供,该目标会被导出。</p> 
  <p>FORCE_UNIX_LAYOUT:默认为OFF。强制使用Unix风格的布局,即使在GUI应用程序不规范的平台上也是如此(例如macOS)。</p> 
  <p>BUNDLE_DESTIMATION:默认为Applications,存放bundle可执行程序的地方。</p> 
  <p>RUNTIME_DESTINATION:默认为${CMAKE_INSTALL_BINDIR},存放二进制文件的地址。</p> 
  <p>LIBRARY_DESTINATION:默认为${CMAKE_INSTALL_LIBDIR},存放库文件的地址。在ELF平台上需要定义“RPATH”。</p> 
  <p>TRANSLATE_XML:默认为OFF,从APPLICATION_XMLS文件生成翻译源文件。</p> 
  <p>TRANSLATIONS_DIRECTORY:默认为${CMAKE_CURRENT_BINARY_DIR}/Translations。翻译源文件存放的文件夹路径。</p> 
  <p>TRANSLATION_TARGET:目标变量的名字,该目标中添加了ts文件作为依赖。</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1753101672453783552"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(LidarView,c++,自动驾驶,信息可视化,qt)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1950230678696161280.htm"
                           title="C++ 计数排序、归并排序、快速排序" target="_blank">C++ 计数排序、归并排序、快速排序</a>
                        <span class="text-muted">每天搬一点点砖</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>计数排序:是一种基于哈希的排序算法。他的基本思想是通过统计每个元素的出现次数,然后根据统计结果将元素依次放入排序后的序列中。这种排序算法适用于范围较小的情况,例如整数范围在0到k之间计数排序步骤:1初始化一个长度为最大元素值加1的计数数组,所有元素初始化为02遍历原始数组,将每个元素值作为索引,在计数数组中对应位置加13将数组清空4遍历计数器数组,按照数组中的元素个数放回到元数组中计数排序的优点和</div>
                    </li>
                    <li><a href="/article/1950226770049429504.htm"
                           title="【C++算法】76.优先级队列_前 K 个高频单词" target="_blank">【C++算法】76.优先级队列_前 K 个高频单词</a>
                        <span class="text-muted">流星白龙</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%98%E9%80%89%E7%AE%97%E6%B3%95C%2B%2B/1.htm">优选算法C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文章目录题目链接:题目描述:解法C++算法代码:题目链接:692.前K个高频单词题目描述:解法利用堆来解决TopK问题预处理一下原始的字符串数组,用一个哈希表统计一下每一个单词出现的频次。创建一个大小为k的堆频次:小根堆字典序(频次相同的时候):大根堆循环让元素依次进堆判断提取结果C++算法代码:classSolution{//定义类型别名,PSI表示对typedefpairPSI;//自定义比较</div>
                    </li>
                    <li><a href="/article/1950226137909096448.htm"
                           title="互信息:理论框架、跨学科应用与前沿进展" target="_blank">互信息:理论框架、跨学科应用与前沿进展</a>
                        <span class="text-muted">大千AI助手</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/OTHER/1.htm">OTHER</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E4%BF%A1%E6%81%AF/1.htm">互信息</a><a class="tag" taget="_blank" href="/search/%E9%A6%99%E5%86%9C/1.htm">香农</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%BF%A1/1.htm">通信</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E6%9C%BA%E5%8F%98%E9%87%8F/1.htm">随机变量</a>
                        <div>1.起源与核心定义互信息(MutualInformation,MI)由克劳德·香农(ClaudeShannon)在1948年开创性论文《AMathematicalTheoryofCommunication》中首次提出,该论文奠定了现代信息论的基础。互信息用于量化两个随机变量之间的统计依赖关系,定义为:若已知一个随机变量的取值,能为另一个随机变量提供的信息量。数学上,对于离散随机变量XXX和YYY,</div>
                    </li>
                    <li><a href="/article/1950222989291220992.htm"
                           title="周日随笔" target="_blank">周日随笔</a>
                        <span class="text-muted">梅子Mey</span>

                        <div>今天心情有点烦燥,但是在看到每天读点故事弹出信息之后,心情瞬间阳光起来。坚持的路上,就是这样,没有容易。你随时可以说暂停,或者放弃。但是,就意味着你看不到未来的果实。但是,坚持的话,真的很难。这次,我想坚持下来。我希望我能在一件事上坚持半年到一年。这次是写作,我希望我能持续地输入和输出。因为这是我的热爱,因为这是我想做一辈子的事,因为,这同样也是有市场的领域。只是,我不够坚持,就看不到成果。我的文</div>
                    </li>
                    <li><a href="/article/1950216926445760512.htm"
                           title="Matrix-Breakout 2 Morpheus靶场解题过程" target="_blank">Matrix-Breakout 2 Morpheus靶场解题过程</a>
                        <span class="text-muted"></span>

                        <div>信息收集目标探测靶机目标很明显就是61.139.2.141了扫描开放端口发现22、80、81访问端口主机访问80翻译一下,并没有发现什么审查源代码发现里面有一张图片,下载下来看看是否有图片的隐写wgethttp://61.139.2.141/trinity.jpegstegoveritas-itrinity.jpeg-o/home/kali/Desktop/11分解后发现什么都没有,里面的keep</div>
                    </li>
                    <li><a href="/article/1950216800016855040.htm"
                           title="Effective C++ 条款10:令operator=返回一个reference to *this" target="_blank">Effective C++ 条款10:令operator=返回一个reference to *this</a>
                        <span class="text-muted">君鼎</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>EffectiveC++条款10:令operator=返回一个referenceto*this核心思想:赋值操作符(operator=)应始终返回当前对象的引用(*this),以实现连锁赋值并保持与内置类型一致的语义。⚠️1.问题场景:违反连锁赋值语义classWidget{public:voidoperator=(constWidget&rhs){//错误:返回voidvalue=rhs.val</div>
                    </li>
                    <li><a href="/article/1950215036291051520.htm"
                           title="北斗短报文兜底、5G-A增强:AORO P1100三防平板构建应急通信网络" target="_blank">北斗短报文兜底、5G-A增强:AORO P1100三防平板构建应急通信网络</a>
                        <span class="text-muted"></span>

                        <div>公网中断的灾区现场,泥石流阻断了最后一条光缆。一支救援队却在废墟间有序穿行,队长手中的三防平板正闪烁着北斗卫星信号,定位坐标与伤亡信息化作一行行短报文,穿透通信孤岛直达指挥中心。这是AOROP1100三防平板搭载的北斗短报文功能在应急救援中的真实场景,更代表了工业移动终端在极端环境下的能力跃迁。AOROP1100三防平板作为遨游通讯2025年推出的旗舰三防设备,AOROP1100三防平板的技术基底</div>
                    </li>
                    <li><a href="/article/1950214784112717824.htm"
                           title="C++ :vector的模拟" target="_blank">C++ :vector的模拟</a>
                        <span class="text-muted">诚自然成</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、vector的迭代器二、vector的构造函数默认构造函数参数构造函数迭代器范围构造函数拷贝构造函数swap:交换vector重载赋值符析构函数reserve:扩容vectorresize:调整大小push_back:添加元素empty:判空pop_back:后删获取大小与容量:size(),capacity()重载operator[]:元素访问insert:插入元素erase:删除一个元</div>
                    </li>
                    <li><a href="/article/1950213145742077952.htm"
                           title="02-Breakout靶机攻略" target="_blank">02-Breakout靶机攻略</a>
                        <span class="text-muted">ZLlllllll0</span>
<a class="tag" taget="_blank" href="/search/02-Breakout%E9%9D%B6%E6%9C%BA/1.htm">02-Breakout靶机</a>
                        <div>第一步搭建靶机下载地址:https://download.vulnhub.com/empire/02-Breakout.zip下载好了之后直接用VM打开然后右击虚拟机,把网络连接改成nat模式第二步,信息收集然后开启虚拟机,左上角编辑,虚拟网络编辑器里面看一下靶机是哪个网段。打开kali用nmap扫一下的这个网段的存活主机,也就是扫除这个靶机的具体ip地址nmap192.168.109.1/24扫</div>
                    </li>
                    <li><a href="/article/1950211016910499840.htm"
                           title="面对冷漠的成人世界,愿你做一个内心强大的人" target="_blank">面对冷漠的成人世界,愿你做一个内心强大的人</a>
                        <span class="text-muted">小西夜语</span>

                        <div>—在漫漫深夜里,遇见最真实的你—一个人的强大,无外乎是内心的强大,说到做一个内心强大的人,小西还是不得不提到丰子恺的漫画《无宠不惊过一生》。漫画中,还是小西喜欢的那一句——“不乱于心,不困于情。不畏将来,不念过往。如此,安好。”想来要成为一个内心强大的人,应该就是要做到这样吧!不乱于心,终日面对各种事务,接收各种信息,能够不被扰乱内心,依然坚定自己的想法,这就是内心强大。如今,我们都谈焦虑,因为总</div>
                    </li>
                    <li><a href="/article/1950209368356089856.htm"
                           title="AI模型训练中过拟合和欠拟合的区别是什么?" target="_blank">AI模型训练中过拟合和欠拟合的区别是什么?</a>
                        <span class="text-muted">workflower</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>在AI模型训练中,过拟合和欠拟合是两种常见的模型性能问题,核心区别在于模型对数据的学习程度和泛化能力:欠拟合(Underfitting)-定义:模型未能充分学习到数据中的规律,对训练数据的拟合程度较差,在训练集和测试集上的表现都不好(如准确率低、损失值高)。-原因:-模型结构过于简单(如用线性模型解决非线性问题);-训练数据量不足或特征信息不充分;-训练时间太短,模型尚未学到有效模式。-表现:训练</div>
                    </li>
                    <li><a href="/article/1950209116165173248.htm"
                           title="uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)" target="_blank">uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)</a>
                        <span class="text-muted">十一猫咪爱养鱼</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%BB%84%E4%BB%B6%E4%B8%8E%E5%8A%9F%E8%83%BD%28%E5%BC%80%E7%AE%B1%E5%8D%B3%E7%94%A8%29/1.htm">前端组件与功能(开箱即用)</a><a class="tag" taget="_blank" href="/search/uniapp%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">uniapp常见问题解决</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/uniapp3%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">uniapp3小程序授权登录</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%E6%95%99%E7%A8%8B/1.htm">微信小程序登录获取用户信息教程</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%98%B5%E7%A7%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E5%A4%B4%E5%83%8F%E4%BF%A1%E6%81%AF%E7%99%BB%E5%BD%95/1.htm">获取用户昵称手机号头像信息登录</a><a class="tag" taget="_blank" href="/search/vue3%E7%89%88%E6%9C%AC%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">vue3版本小程序平台授权登录</a><a class="tag" taget="_blank" href="/search/uniap%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AB%AF%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B5%81%E7%A8%8B/1.htm">uniap小程序端用户登录流程</a><a class="tag" taget="_blank" href="/search/uni%E5%AE%8C%E6%95%B4%E7%9A%84%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E7%99%BB%E5%BD%95%E6%BA%90%E7%A0%81/1.htm">uni完整的小程序平台登录源码</a>
                        <div>效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是</div>
                    </li>
                    <li><a href="/article/1950206970766094336.htm"
                           title="C++编程基础与面向对象概念解析" target="_blank">C++编程基础与面向对象概念解析</a>
                        <span class="text-muted">侯昂</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/1.htm">面向对象编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E8%AF%AD%E6%B3%95/1.htm">C++语法</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1/1.htm">类与对象</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81%E6%80%A7/1.htm">继承与多态性</a>
                        <div>C++编程基础与面向对象概念解析背景简介C++是一种广泛使用的面向对象编程语言,它允许开发者创建高效、灵活且功能强大的程序。本文基于《C++Primer》一书的章节内容,深入解析C++的核心概念和面向对象编程原则,旨在帮助读者构建扎实的C++编程基础。面向对象编程的原则软件危机与进化介绍了软件危机的产生和软件进化的必要性,强调了面向对象编程(OOP)在应对这些问题中的优势。面向对象编程范式讨论了面</div>
                    </li>
                    <li><a href="/article/1950205080594608128.htm"
                           title="Deepseek技术深化:驱动大数据时代颠覆性变革的未来引擎" target="_blank">Deepseek技术深化:驱动大数据时代颠覆性变革的未来引擎</a>
                        <span class="text-muted">荣华富贵8</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>在大数据时代,信息爆炸和数据驱动的决策逐渐重塑各行各业。作为一项前沿技术,Deepseek正在引领新一轮技术革新,颠覆传统数据处理与分析方式。本文将从理论原理、应用场景和前沿代码实践三个层面,深入剖析Deepseek技术如何为大数据时代提供颠覆性变革的解决方案。一、技术背景与核心思想1.1大数据挑战与机遇在数据量呈指数级增长的背景下,传统数据处理方法面临数据存储、计算效率和信息提取精度的诸多挑战。</div>
                    </li>
                    <li><a href="/article/1950205081676738560.htm"
                           title="K8s常用的命令" target="_blank">K8s常用的命令</a>
                        <span class="text-muted">尚未来-</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a>
                        <div>一、基础命令查看集群信息bashkubectlcluster-info#显示集群端点和服务信息查看节点bashkubectlgetnodes#列出所有节点kubectldescribenode#查看节点详细信息查看命名空间bashkubectlgetnamespaces#列出所有命名空间切换命名空间bashkubectlconfigset-context--current--namespace=二</div>
                    </li>
                    <li><a href="/article/1950201675297910784.htm"
                           title="大数据之路:阿里巴巴大数据实践——大数据领域建模综述" target="_blank">大数据之路:阿里巴巴大数据实践——大数据领域建模综述</a>
                        <span class="text-muted"></span>

                        <div>为什么需要数据建模核心痛点数据冗余:不同业务重复存储相同数据(如用户基础信息),导致存储成本激增。计算资源浪费:未经聚合的明细数据直接参与计算(如全表扫描),消耗大量CPU/内存资源。数据一致性缺失:同一指标在不同业务线的口径差异(如“活跃用户”定义不同),引发决策冲突。开发效率低下:每次分析需重新编写复杂逻辑,无法复用已有模型。数据建模核心价值性能提升:分层设计(ODS→DWD→DWS→ADS)</div>
                    </li>
                    <li><a href="/article/1950200667587014656.htm"
                           title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a>
                        <span class="text-muted"></span>

                        <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div>
                    </li>
                    <li><a href="/article/1950199406426910720.htm"
                           title="百度地图 雷达/地理编码 功能使用" target="_blank">百度地图 雷达/地理编码 功能使用</a>
                        <span class="text-muted">安卓开发者</span>

                        <div>目录(?)[-]地图雷达基本使用首先你需要在你的API控制台注册你的雷达初始化并注入你的信息开始上传单次上传定时重复上传取回信息打完收工元古巨坑地理编码最近一直在优化软件的bug..然后后面可能又要大改..所以趁这两天有时间赶紧码两篇博文..=.=地图功能可以说是现在APP中最常用的功能…呃..之一..不管是电商,社交,o2o,b2c,p2p,锟斤拷,烫烫烫都需要用地图来辅助..博客里基本的地图实</div>
                    </li>
                    <li><a href="/article/1950199279641489408.htm"
                           title="Android通知(Notification)全面解析:从基础到高级应用" target="_blank">Android通知(Notification)全面解析:从基础到高级应用</a>
                        <span class="text-muted"></span>

                        <div>一、Android通知概述通知(Notification)是Android系统中用于在应用之外向用户传递信息的重要机制。当应用需要告知用户某些事件或信息时,可以通过通知在状态栏显示图标,用户下拉通知栏即可查看详细信息。这种机制几乎被所有现代应用采用,用于推送新闻、消息、广告等内容3。与Toast相比,Notification的优势在于:可以长时间停留在通知栏,适合内容较多且需要持久展示的信息支持丰</div>
                    </li>
                    <li><a href="/article/1950198560637120512.htm"
                           title="我应该如何使用直返APP才能获得更多的返利?" target="_blank">我应该如何使用直返APP才能获得更多的返利?</a>
                        <span class="text-muted">氧惠好物</span>

                        <div>要想在直返APP获得更多返利,您可以尝试以下几个方法:氧惠APP(带货领导者)——是与以往完全不同的抖客+淘客app!2024全新模式,我的直推也会放到你下面。主打:带货高补贴,深受各位带货团队长喜爱(每天出单带货几十万单)。注册即可享受高补贴+0撸+捡漏等带货新体验。送万元推广大礼包,教你如何1年做到百万团队。首先,注册并完善账户信息。注册后,您将获得新人专享优惠券,以及更多的返利机会。同时,确</div>
                    </li>
                    <li><a href="/article/1950192847256875008.htm"
                           title="数据中台中的数据科学工作台:Jupyter集成方案" target="_blank">数据中台中的数据科学工作台:Jupyter集成方案</a>
                        <span class="text-muted">AI大数据智能洞察</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E4%B8%8EAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">大数据与AI人工智能</a><a class="tag" taget="_blank" href="/search/jupyter/1.htm">jupyter</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>数据中台中的数据科学工作台:Jupyter集成方案关键词:数据中台、数据科学工作台、JupyterNotebook、数据科学、机器学习、数据可视化、协作开发摘要:本文深入探讨了在数据中台架构中集成JupyterNotebook作为数据科学工作台的完整解决方案。我们将从数据中台的基本概念出发,详细分析Jupyter在数据科学工作流中的核心作用,介绍多种集成方案和技术实现细节,并通过实际案例展示如何构</div>
                    </li>
                    <li><a href="/article/1950191460854853632.htm"
                           title="你的连接不是专用连接攻击者可能试图从 github.com 窃取你的信息(例如,密码、消息或信用卡)。 --解决办法" target="_blank">你的连接不是专用连接攻击者可能试图从 github.com 窃取你的信息(例如,密码、消息或信用卡)。 --解决办法</a>
                        <span class="text-muted"></span>

                        <div>我遇到了.检查安全软件或企业防火墙/代理(包括VPN)这个问题,关了就好,我是用来xbox加速github,所以先开在关既可以加速又可以访问这个错误表明你的浏览器(MicrosoftEdge)无法安全地连接到GitHub,因为遇到了证书验证问题(NET::ERR_CERT_AUTHORITY_INVALID)。错误信息明确指出网站使用了HSTS(HTTPStrictTransportSecurit</div>
                    </li>
                    <li><a href="/article/1950190325960077312.htm"
                           title="Jupyter Notebook:数据科学的“瑞士军刀”" target="_blank">Jupyter Notebook:数据科学的“瑞士军刀”</a>
                        <span class="text-muted">a小胡哦</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/1.htm">机器学习基础</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>在数据科学的世界里,JupyterNotebook是一个不可或缺的工具,它就像是数据科学家手中的“瑞士军刀”,功能强大且灵活多变。今天,就让我们一起深入了解这个神奇的工具。一、JupyterNotebook是什么?JupyterNotebook是一个开源的Web应用程序,它允许你创建和共享包含实时代码、方程、可视化和解释性文本的文档。它支持多种编程语言,其中Python是最常用的语言之一。Jupy</div>
                    </li>
                    <li><a href="/article/1950190073274232832.htm"
                           title="k8s常用基础命令总结" target="_blank">k8s常用基础命令总结</a>
                        <span class="text-muted">Tony666688888</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a>
                        <div>----------------------k8s常用基础命令---------------------------------获取Pod信息#1.获取k8s的命名空间kubectlgetnamespaces1)获取Pod列表及简要信息:kubectlgetpods2)以YAML格式获取Pod详细信息:kubectlgetpod-oyaml3)获取特定命名空间中的Pod列表kubectlgetpo</div>
                    </li>
                    <li><a href="/article/1950186671760797696.htm"
                           title="数据可视化:艺术与科学的交汇点,如何让数据“开口说话”?" target="_blank">数据可视化:艺术与科学的交汇点,如何让数据“开口说话”?</a>
                        <span class="text-muted">Echo_Wish</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                        <div>数据可视化:艺术与科学的交汇点,如何让数据“开口说话”?数据可视化,是科技与艺术的结合,是让冰冷的数字变得生动有趣的桥梁。它既是科学——讲究准确性、逻辑性、数据处理的严谨性;又是艺术——强调美感、信息传递的直觉性,以及与观众的共鸣。可以说,好的数据可视化不仅能让人快速理解复杂信息,还能激发思考、引发行动。科学——数据可视化的理性基石首先,数据可视化必须遵循严谨的数据处理和清晰的信息传递原则。这就要</div>
                    </li>
                    <li><a href="/article/1950185032945561600.htm"
                           title="mac升级mysql_Mac OSX下的MySQL数据库升级" target="_blank">mac升级mysql_Mac OSX下的MySQL数据库升级</a>
                        <span class="text-muted">weixin_39801714</span>
<a class="tag" taget="_blank" href="/search/mac%E5%8D%87%E7%BA%A7mysql/1.htm">mac升级mysql</a>
                        <div>MacOSX下的数据库升级最麻烦的不过权限的问题.本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式,MacPorts/Homebrew的方式大同小异.从5.6.17升级到5.7.18安装目录信息ls-al/usr/local|grepmysqllrwxr-xr-x1rootwheel30B52100:39mysql@->mysql-5.6.17-osx10.7-x86_64drwxr-</div>
                    </li>
                    <li><a href="/article/1950183268448006144.htm"
                           title="python编程第十四课:数据可视化" target="_blank">python编程第十四课:数据可视化</a>
                        <span class="text-muted">小小源助手</span>
<a class="tag" taget="_blank" href="/search/Python%E4%BB%A3%E7%A0%81%E5%AE%9E%E4%BE%8B/1.htm">Python代码实例</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Python数据可视化:让数据“开口说话”在当今数据爆炸的时代,数据可视化已成为探索数据规律、传达数据信息的关键技术。Python凭借其丰富的第三方库,为数据可视化提供了强大而灵活的解决方案。本文将带你深入了解Matplotlib库的基础绘图、Seaborn库的高级可视化以及交互式可视化工具Plotly,帮助你通过图表清晰地展示数据背后的故事。一、Matplotlib库基础绘图Matplotlib</div>
                    </li>
                    <li><a href="/article/1950181355178487808.htm"
                           title="推荐1个适合女生做的小副业,靠谱又逆天!(建议收藏)" target="_blank">推荐1个适合女生做的小副业,靠谱又逆天!(建议收藏)</a>
                        <span class="text-muted">氧惠全网优惠</span>

                        <div>生活中,女性经常会面临更多方面的需求,比如工作需要、家庭需要和孩子的陪伴教育需要,所以往往会有更大的职业压力,所以这里就整理了部分比较适合女生做的副业,一起来看。适合女生做的副业【1】剧本杀主持人剧本杀是年轻人当下热门的桌游,一般在周六日、节假日或者是晚上的顾客会比较多,所以和我们正常的工作时间错开,比较适合我们平时做兼职。【2】PPT制作我们可以在网上发布信息,也可以直接去某宝接单,和客服说来接</div>
                    </li>
                    <li><a href="/article/1950181127176122368.htm"
                           title="C++中std::variant的使用详解和实战代码示例" target="_blank">C++中std::variant的使用详解和实战代码示例</a>
                        <span class="text-muted">点云SLAM</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/variant/1.htm">variant</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/1.htm">C++泛型编程</a><a class="tag" taget="_blank" href="/search/%E8%81%94%E5%90%88%E4%BD%93/1.htm">联合体</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E5%9E%8B%E6%93%A6%E9%99%A4%E6%9C%BA%E5%88%B6/1.htm">类型擦除机制</a><a class="tag" taget="_blank" href="/search/C%2B%2B17/1.htm">C++17</a>
                        <div>std::variant是C++17引入的一个类型安全的联合体(type-safeunion),它可以在多个类型之间存储一个值,并在编译时进行类型检查。它是现代C++类型擦除与泛型编程的核心工具之一,适用于构建可变类型结构、消息传递系统、状态机等。一、基本概念#includestd::variantv;类似于联合体union,但类型安全。std::variant只能存储其中一个类型的值。默认构造时</div>
                    </li>
                    <li><a href="/article/1950180118609588224.htm"
                           title="HikariCP调试日志深度解析:生产环境故障排查完全指南" target="_blank">HikariCP调试日志深度解析:生产环境故障排查完全指南</a>
                        <span class="text-muted"></span>

                        <div>HikariCP调试日志深度解析:生产环境故障排查完全指南更新时间:2025年7月4日|作者:资深架构师|适用版本:HikariCP5.x+|难度等级:中高级前言在生产环境中,数据库连接池往往是系统性能的关键瓶颈。HikariCP作为当前最流行的Java连接池,其调试日志包含了丰富的运行时信息,能够帮助我们快速定位和解决各种连接池相关问题。本文将深入解析HikariCP的日志体系,提供一套完整的故</div>
                    </li>
                                <li><a href="/article/37.htm"
                                       title="ASM系列五 利用TreeApi 解析生成Class" target="_blank">ASM系列五 利用TreeApi 解析生成Class</a>
                                    <span class="text-muted">lijingyao8206</span>
<a class="tag" taget="_blank" href="/search/ASM/1.htm">ASM</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E8%8A%82%E7%A0%81%E5%8A%A8%E6%80%81%E7%94%9F%E6%88%90/1.htm">字节码动态生成</a><a class="tag" taget="_blank" href="/search/ClassNode/1.htm">ClassNode</a><a class="tag" taget="_blank" href="/search/TreeAPI/1.htm">TreeAPI</a>
                                    <div>   前面CoreApi的介绍部分基本涵盖了ASMCore包下面的主要API及功能,其中还有一部分关于MetaData的解析和生成就不再赘述。这篇开始介绍ASM另一部分主要的Api。TreeApi。这一部分源码是关联的asm-tree-5.0.4的版本。 
         在介绍前,先要知道一点, Tree工程的接口基本可以完</div>
                                </li>
                                <li><a href="/article/164.htm"
                                       title="链表树——复合数据结构应用实例" target="_blank">链表树——复合数据结构应用实例</a>
                                    <span class="text-muted">bardo</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E5%9E%8B%E7%BB%93%E6%9E%84/1.htm">树型结构</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E7%BB%93%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">表结构设计</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E8%8F%9C%E5%8D%95%E6%8E%92%E5%BA%8F/1.htm">菜单排序</a>
                                    <div>我们清楚:数据库设计中,表结构设计的好坏,直接影响程序的复杂度。所以,本文就无限级分类(目录)树与链表的复合在表设计中的应用进行探讨。当然,什么是树,什么是链表,这里不作介绍。有兴趣可以去看相关的教材。 
需求简介: 
经常遇到这样的需求,我们希望能将保存在数据库中的树结构能够按确定的顺序读出来。比如,多级菜单、组织结构、商品分类。更具体的,我们希望某个二级菜单在这一级别中就是第一个。虽然它是最后</div>
                                </li>
                                <li><a href="/article/291.htm"
                                       title="为啥要用位运算代替取模呢" target="_blank">为啥要用位运算代替取模呢</a>
                                    <span class="text-muted">chenchao051</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/%E5%93%88%E5%B8%8C/1.htm">哈希</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a>
                                    <div>  
  在hash中查找key的时候,经常会发现用&取代%,先看两段代码吧, 
  
  JDK6中的HashMap中的indexFor方法: 
    /**
     * Returns index for hash code h.
     */
    static int indexFor(int h, int length) {
</div>
                                </li>
                                <li><a href="/article/418.htm"
                                       title="最近的情况" target="_blank">最近的情况</a>
                                    <span class="text-muted">麦田的设计者</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E5%88%92/1.htm">计划</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83/1.htm">软考</a><a class="tag" taget="_blank" href="/search/%E6%83%B3/1.htm">想</a>
                                    <div>      今天是2015年4月27号 
     整理一下最近的思绪以及要完成的任务 
            1、最近在驾校科目二练车,每周四天,练三周。其实做什么都要用心,追求合理的途径解决。为</div>
                                </li>
                                <li><a href="/article/545.htm"
                                       title="PHP去掉字符串中最后一个字符的方法" target="_blank">PHP去掉字符串中最后一个字符的方法</a>
                                    <span class="text-muted">IT独行者</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a>
                                    <div>今天在PHP项目开发中遇到一个需求,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符",",最终结果为1,2,3,4,5,6 代码如下: 
$str = "1,2,3,4,5,6,";
$newstr = substr($str,0,strlen($str)-1);
echo $newstr; </div>
                                </li>
                                <li><a href="/article/672.htm"
                                       title="hadoop在linux上单机安装过程" target="_blank">hadoop在linux上单机安装过程</a>
                                    <span class="text-muted">_wy_</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                    <div>1、安装JDK 
    jdk版本最好是1.6以上,可以使用执行命令java -version查看当前JAVA版本号,如果报命令不存在或版本比较低,则需要安装一个高版本的JDK,并在/etc/profile的文件末尾,根据本机JDK实际的安装位置加上以下几行: 
   export JAVA_HOME=/usr/java/jdk1.7.0_25  </div>
                                </li>
                                <li><a href="/article/799.htm"
                                       title="JAVA进阶----分布式事务的一种简单处理方法" target="_blank">JAVA进阶----分布式事务的一种简单处理方法</a>
                                    <span class="text-muted">无量</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%B3%BB%E7%BB%9F%E4%BA%A4%E4%BA%92/1.htm">多系统交互</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a>
                                    <div>每个方法都是原子操作: 
 
提供第三方服务的系统,要同时提供执行方法和对应的回滚方法 
 
A系统调用B,C,D系统完成分布式事务 
 
 
=========执行开始======== 
A.aa(); 
 
try { 
 B.bb(); 
} catch(Exception e) { 
 A.rollbackAa(); 
} 
 
try { 
 C.cc(); 
} catch(Excep</div>
                                </li>
                                <li><a href="/article/926.htm"
                                       title="安墨移动广 告:移动DSP厚积薄发 引领未来广 告业发展命脉" target="_blank">安墨移动广 告:移动DSP厚积薄发 引领未来广 告业发展命脉</a>
                                    <span class="text-muted">矮蛋蛋</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a>
                                    <div>  “谁掌握了强大的DSP技术,谁将引领未来的广 告行业发展命脉。”2014年,移动广 告行业的热点非移动DSP莫属。各个圈子都在纷纷谈论,认为移动DSP是行业突破点,一时间许多移动广 告联盟风起云涌,竞相推出专属移动DSP产品。 
 
  到底什么是移动DSP呢? 
 
  DSP(Demand-SidePlatform),就是需求方平台,为解决广 告主投放的各种需求,真正实现人群定位的精准广 </div>
                                </li>
                                <li><a href="/article/1053.htm"
                                       title="myelipse设置" target="_blank">myelipse设置</a>
                                    <span class="text-muted">alafqq</span>
<a class="tag" taget="_blank" href="/search/IP/1.htm">IP</a>
                                    <div>  在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的数倍。因此项目的可维护性、可复用性是衡量一个项目好坏的关键。而注释则是可维护性中必不可少的一环。 
 
 
 
注释模板导入步骤  
 
 
 
安装方法: 
打开eclipse/myeclipse 
选择 window-->Preferences-->JAVA-->Code-->Code </div>
                                </li>
                                <li><a href="/article/1180.htm"
                                       title="java数组" target="_blank">java数组</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/java%E6%95%B0%E7%BB%84/1.htm">java数组</a>
                                    <div>java数组的   声明  创建  初始化;   java支持C语言 
   
  
数组中的每个数都有唯一的一个下标 
  一维数组的定义   声明:  int[] a = new int[3];声明数组中有三个数int[3]    
int[] a 中有三个数,下标从0开始,可以同过for来遍历数组中的数

</div>
                                </li>
                                <li><a href="/article/1307.htm"
                                       title="javascript读取表单数据" target="_blank">javascript读取表单数据</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>利用javascript读取表单数据,可以利用以下三种方法获取: 
1、通过表单ID属性:var a = document.getElementByIdx_x_x("id"); 
2、通过表单名称属性:var b = document.getElementsByName("name"); 
3、直接通过表单名字获取:var c = form.content.</div>
                                </li>
                                <li><a href="/article/1434.htm"
                                       title="探索JUnit4扩展:使用Theory" target="_blank">探索JUnit4扩展:使用Theory</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/Theory/1.htm">Theory</a>
                                    <div>理论机制(Theory) 
一.为什么要引用理论机制(Theory) 
        当今软件开发中,测试驱动开发(TDD — Test-driven development)越发流行。为什么 TDD 会如此流行呢?因为它确实拥有很多优点,它允许开发人员通过简单的例子来指定和表明他们代码的行为意图。 
TDD 的优点: 
    &nb</div>
                                </li>
                                <li><a href="/article/1561.htm"
                                       title="[Spring Data Mongo一]Spring Mongo Template操作MongoDB" target="_blank">[Spring Data Mongo一]Spring Mongo Template操作MongoDB</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/template/1.htm">template</a>
                                    <div>什么是Spring Data Mongo 
Spring Data MongoDB项目对访问MongoDB的Java客户端API进行了封装,这种封装类似于Spring封装Hibernate和JDBC而提供的HibernateTemplate和JDBCTemplate,主要能力包括 
1. 封装客户端跟MongoDB的链接管理 
2. 文档-对象映射,通过注解:@Document(collectio</div>
                                </li>
                                <li><a href="/article/1688.htm"
                                       title="【Kafka八】Zookeeper上关于Kafka的配置信息" target="_blank">【Kafka八】Zookeeper上关于Kafka的配置信息</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                    <div>问题: 
1. Kafka的哪些信息记录在Zookeeper中 2. Consumer Group消费的每个Partition的Offset信息存放在什么位置 
3. Topic的每个Partition存放在哪个Broker上的信息存放在哪里 
4. Producer跟Zookeeper究竟有没有关系?没有关系!!! 
  
//consumers、config、brokers、cont</div>
                                </li>
                                <li><a href="/article/1815.htm"
                                       title="java OOM内存异常的四种类型及异常与解决方案" target="_blank">java OOM内存异常的四种类型及异常与解决方案</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/java+OOM+%E5%86%85%E5%AD%98%E5%BC%82%E5%B8%B8/1.htm">java OOM 内存异常</a>
                                    <div>       OOM异常的四种类型: 
    
  一: StackOverflowError :通常因为递归函数引起(死递归,递归太深)。-Xss 128k 一般够用。 
  
     二: out Of memory: PermGen Space:通常是动态类大多,比如web 服务器自动更新部署时引起。-Xmx</div>
                                </li>
                                <li><a href="/article/1942.htm"
                                       title="java-实现链表反转-递归和非递归实现" target="_blank">java-实现链表反转-递归和非递归实现</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>20120422更新: 
对链表中部分节点进行反转操作,这些节点相隔k个: 
0->1->2->3->4->5->6->7->8->9 
k=2 
8->1->6->3->4->5->2->7->0->9 
注意1 3 5 7 9 位置是不变的。 
解法: 
将链表拆成两部分: 
a.0-&</div>
                                </li>
                                <li><a href="/article/2069.htm"
                                       title="Netty源码学习-DelimiterBasedFrameDecoder" target="_blank">Netty源码学习-DelimiterBasedFrameDecoder</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div> 看DelimiterBasedFrameDecoder的API,有举例: 
 接收到的ChannelBuffer如下: 
 
 +--------------+
 | ABC\nDEF\r\n |
 +--------------+ 
 经过DelimiterBasedFrameDecoder(Delimiters.lineDelimiter())之后,得到: 
 
 +-----+----</div>
                                </li>
                                <li><a href="/article/2196.htm"
                                       title="linux的一些命令 -查看cc攻击-网口ip统计等" target="_blank">linux的一些命令 -查看cc攻击-网口ip统计等</a>
                                    <span class="text-muted">hotsunshine</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Linux判断CC攻击命令详解 
2011年12月23日 ⁄ 安全 ⁄ 暂无评论 
查看所有80端口的连接数 
 
 
netstat -nat|grep -i '80'|wc -l
对连接的IP按连接数量进行排序

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
查看TCP连接状态

n</div>
                                </li>
                                <li><a href="/article/2323.htm"
                                       title="Spring获取SessionFactory" target="_blank">Spring获取SessionFactory</a>
                                    <span class="text-muted">ctrain</span>
<a class="tag" taget="_blank" href="/search/sessionFactory/1.htm">sessionFactory</a>
                                    <div>
String sql = "select sysdate from dual";
		
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 
String[] names = wac.getBeanDefinitionNames();
for(int i=0; i&</div>
                                </li>
                                <li><a href="/article/2450.htm"
                                       title="Hive几种导出数据方式" target="_blank">Hive几种导出数据方式</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BA/1.htm">数据导出</a>
                                    <div>Hive几种导出数据方式 
     
1.拷贝文件 
  
如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以。 
hadoop fs –cp source_path target_path 
  
2.导出到本地文件系统 
  
--不能使用insert into local directory来导出数据,会报错 
--只能使用</div>
                                </li>
                                <li><a href="/article/2577.htm"
                                       title="编程之美" target="_blank">编程之美</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E6%9E%84/1.htm">重构</a>
                                    <div>我个人的 PHP 编程经验中,递归调用常常与静态变量使用。静态变量的含义可以参考 PHP 手册。希望下面的代码,会更有利于对递归以及静态变量的理解 
  
header("Content-type: text/plain");
function static_function () {
    static $i = 0;
    if ($i++ < 1</div>
                                </li>
                                <li><a href="/article/2704.htm"
                                       title="Android保存用户名和密码" target="_blank">Android保存用户名和密码</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>转自:http://www.2cto.com/kf/201401/272336.html 
我们不管在开发一个项目或者使用别人的项目,都有用户登录功能,为了让用户的体验效果更好,我们通常会做一个功能,叫做保存用户,这样做的目地就是为了让用户下一次再使用该程序不会重新输入用户名和密码,这里我使用3种方式来存储用户名和密码 
1、通过普通 的txt文本存储 
2、通过properties属性文件进行存</div>
                                </li>
                                <li><a href="/article/2831.htm"
                                       title="Oracle 复习笔记之同义词" target="_blank">Oracle 复习笔记之同义词</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/Oracle+%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">Oracle 同义词</a><a class="tag" taget="_blank" href="/search/Oracle+synonym/1.htm">Oracle synonym</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2098861 
1.什么是同义词 
      同义词是现有模式对象的一个别名。 
      概念性的东西,什么是模式呢?创建一个用户,就相应的创建了 一个模式。模式是指数据库对象,是对用户所创建的数据对象的总称。模式对象包括表、视图、索引、同义词、序列、过</div>
                                </li>
                                <li><a href="/article/2958.htm"
                                       title="Ajax案例" target="_blank">Ajax案例</a>
                                    <span class="text-muted">gongmeitao</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a>
                                    <div>数据库采用Sql Server2005 
项目名称为:Ajax_Demo 
1.com.demo.conn包 
package com.demo.conn; 
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; 
//获取数据库连接的类public class DBConnec</div>
                                </li>
                                <li><a href="/article/3085.htm"
                                       title="ASP.NET中Request.RawUrl、Request.Url的区别" target="_blank">ASP.NET中Request.RawUrl、Request.Url的区别</a>
                                    <span class="text-muted">hvt</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a>
                                    <div>  
如果访问的地址是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree%3C&n=myslider#zonemenu那么Request.Url.ToString() 的值是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree<&</div>
                                </li>
                                <li><a href="/article/3212.htm"
                                       title="SVG 教程 (七)SVG 实例,SVG 参考手册" target="_blank">SVG 教程 (七)SVG 实例,SVG 参考手册</a>
                                    <span class="text-muted">天梯梦</span>
<a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a>
                                    <div>SVG 实例   在线实例 
下面的例子是把SVG代码直接嵌入到HTML代码中。 
谷歌Chrome,火狐,Internet Explorer9,和Safari都支持。 
注意:下面的例子将不会在Opera运行,即使Opera支持SVG - 它也不支持SVG在HTML代码中直接使用。    SVG 实例 
SVG基本形状 
一个圆 
矩形 
不透明矩形 
一个矩形不透明2 
一个带圆角矩</div>
                                </li>
                                <li><a href="/article/3339.htm"
                                       title="事务管理" target="_blank">事务管理</a>
                                    <span class="text-muted">luyulong</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a>
                                    <div>事物管理 
 
spring事物的好处 
 
为不同的事物API提供了一致的编程模型 
支持声明式事务管理 
提供比大多数事务API更简单更易于使用的编程式事务管理API 
整合spring的各种数据访问抽象 
 
TransactionDefinition 
定义了事务策略 
 
int getIsolationLevel()得到当前事务的隔离级别 
 
READ_COMMITTED </div>
                                </li>
                                <li><a href="/article/3466.htm"
                                       title="基础数据结构和算法十一:Red-black binary search tree" target="_blank">基础数据结构和算法十一:Red-black binary search tree</a>
                                    <span class="text-muted">sunwinner</span>
<a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/Red-black/1.htm">Red-black</a>
                                    <div>  
The insertion algorithm for 2-3 trees just described is not difficult to understand; now, we will see that it is also not difficult to implement. We will consider a simple representation known</div>
                                </li>
                                <li><a href="/article/3593.htm"
                                       title="centos同步时间" target="_blank">centos同步时间</a>
                                    <span class="text-muted">stunizhengjia</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%9B%86%E7%BE%A4%E5%90%8C%E6%AD%A5%E6%97%B6%E9%97%B4/1.htm">集群同步时间</a>
                                    <div>做了集群,时间的同步就显得非常必要了。 以下是查到的如何做时间同步。 在CentOS 5不再区分客户端和服务器,只要配置了NTP,它就会提供NTP服务。 1)确认已经ntp程序包: # yum install ntp 2)配置时间源(默认就行,不需要修改) # vi /etc/ntp.conf server pool.ntp.o</div>
                                </li>
                                <li><a href="/article/3720.htm"
                                       title="ITeye 9月技术图书有奖试读获奖名单公布" target="_blank">ITeye 9月技术图书有奖试读获奖名单公布</a>
                                    <span class="text-muted">ITeye管理员</span>
<a class="tag" taget="_blank" href="/search/ITeye/1.htm">ITeye</a>
                                    <div>ITeye携手博文视点举办的9月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。 9月试读活动回顾:http://webmaster.iteye.com/blog/2118112本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):  
  
  
《NFC:Arduino、Andro</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>