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/1773613272952537088.htm"
                           title="【Python】一文详细介绍 py格式 文件" target="_blank">【Python】一文详细介绍 py格式 文件</a>
                        <span class="text-muted">高斯小哥</span>
<a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80%E3%80%90%E9%AB%98%E8%B4%A8%E9%87%8F%E5%90%88%E9%9B%86%E3%80%91/1.htm">Python基础【高质量合集】</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8/1.htm">新手入门</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>【Python】一文详细介绍py格式文件个人主页:高斯小哥高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程希望得到您的订阅和支持~创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)文章目录一、py格式文件简介二、如何创建和编辑py格式文件三、如何运行py</div>
                    </li>
                    <li><a href="/article/1773588094755340288.htm"
                           title="美团自动配送车2024春季招聘 | 社招专场" target="_blank">美团自动配送车2024春季招聘 | 社招专场</a>
                        <span class="text-muted">美团技术团队</span>

                        <div>关于美团自动配送团队美团自动配送以自研L4级自动驾驶软硬件技术为核心,与美团即时零售业务结合,形成满足公开道路、校园、社区、工业园区等室外全场景下的自动配送整体解决方案。美团自动配送团队成立于2016年,团队成员来自于Waymo、Cruise、Pony.ai、泛亚等自动驾驶行业头部公司,自动驾驶技术团队博士占比高达30%,依靠视觉、激光等传感器,实时感知预测周围环境,通过高精地图定位和智能决策规划</div>
                    </li>
                    <li><a href="/article/1773582305621770240.htm"
                           title="华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++)" target="_blank">华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++)</a>
                        <span class="text-muted">华为OD题库</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输出描述解析代码题目描述给定一个单链表L,请编写程序输出L中间结点保存的数据。如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7;给定L为1→2→3→4,则输出应该为3;输入描述每个输入包含1个测试用例。每个测试用例:第一行给出链表首结点的地址、结点总</div>
                    </li>
                    <li><a href="/article/1773569717865349120.htm"
                           title="SpringMVC设置全局异常处理器" target="_blank">SpringMVC设置全局异常处理器</a>
                        <span class="text-muted">水岸齐天</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>
                        <div>文章目录背景分析使用@ControllerAdvice(@RestControllerAdvice)+@ExceptionHandler实现全局异常全局异常处理-多个处理器匹配顺序存在一个类中存在不同的类中对于过滤器和拦截器中的异常,有两种思路可以考虑背景在项目中我们有需求做一个全局异常处理,来规范所有出去的异常信息。参考:官方文档分析首先ControllerAdvice(RestControll</div>
                    </li>
                    <li><a href="/article/1773561914471809024.htm"
                           title="数据分析:低代码平台助力大数据时代的飞跃发展" target="_blank">数据分析:低代码平台助力大数据时代的飞跃发展</a>
                        <span class="text-muted">快乐非自愿</span>
<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/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>随着信息技术的突飞猛进,我们身处于一个数据量空前增长的时代——大数据时代。在这个时代背景下,数据分析已经成为企业决策、政策制定、科学研究等众多领域不可或缺的重要工具。然而,面对海量的数据和日益复杂多变的分析需求,传统的数据分析方法往往捉襟见肘,难以应对。幸运的是,低代码平台的兴起为大数据分析注入了新的活力,成为推动大数据时代发展的重要力量。低代码平台,顾名思义,是一种通过少量甚至无需编写代码,就能</div>
                    </li>
                    <li><a href="/article/1773561033059794944.htm"
                           title="以前开发MFC界面如何快速转成QT界面" target="_blank">以前开发MFC界面如何快速转成QT界面</a>
                        <span class="text-muted">广州视觉芯软件有限公司</span>
<a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>将MFC界面快速转换为Qt界面可能需要进行一些手动工作,因为MFC和Qt是两个不同的界面框架,它们具有不同的设计和实现原理。但是,以下步骤可以帮助你快速进行转换:创建一个新的Qt项目:使用QtCreator创建一个新的Qt项目。分析MFC界面:仔细分析你的MFC界面,包括窗口、对话框、控件等的布局、样式和行为。重新设计界面:使用Qt的可视化设计器重新设计界面。在QtCreator的设计器中,你可以</div>
                    </li>
                    <li><a href="/article/1773554866065571840.htm"
                           title="Django之Debug篇" target="_blank">Django之Debug篇</a>
                        <span class="text-muted">菜鸟之编程</span>
<a class="tag" taget="_blank" href="/search/Django/1.htm">Django</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>一、DebugToolBar基本使用1.1、概述Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息。官方文档:DjangoDebugToolbar—DjangoDebugToolbar4.3.0documentation1.2、安装pipinstalldjango-debug-</div>
                    </li>
                    <li><a href="/article/1773547565535526912.htm"
                           title="c++中如何判断变量的数据类型,并输出" target="_blank">c++中如何判断变量的数据类型,并输出</a>
                        <span class="text-muted">xnrbjy</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>C++中如果想要判断变量的数据类型,可以使用typeid运算符。该运算符返回一个std::type_info类型的对象,可以使用name()方法获取其名称从而确定变量的类型,例如:#include#includeusingnamespacestd;intmain(){inta=123;floatb=3.14;boolc=true;chard='A';stringe="HelloWorld";cou</div>
                    </li>
                    <li><a href="/article/1773545802220765184.htm"
                           title="C++学习笔记(lambda函数)" target="_blank">C++学习笔记(lambda函数)</a>
                        <span class="text-muted">__TAT__</span>
<a class="tag" taget="_blank" href="/search/C%26amp%3BC%2B%2B/1.htm">C&C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>C++learningnote1、lambda函数的语法2、lambda函数的几种用法1、lambda函数的语法lambda函数的一般语法如下:[capture_clause](parameters)->return_type{function_body}capture_clause:需要捕获的变量,但要求该变量必须在这个作用域中。通常的捕获方式有以下几种:[]:不捕获任何变量[&]:按引用捕获变</div>
                    </li>
                    <li><a href="/article/1773538564877910016.htm"
                           title="你有想删除的人生吗?(2022-10-10)" target="_blank">你有想删除的人生吗?(2022-10-10)</a>
                        <span class="text-muted">燕归来2021</span>

                        <div>中午遛弯清茶发信息给我:有本书不用看了,建议看作者的另一本。然后聊起她推给我的日剧《人生删除事务所》,我只看了一集,名字觉得很有意思,就问清茶有没有想删除的人生,她回:没有,这么平淡的日子。我:我也没有,这么精彩的人生,哈哈。虽是玩笑说,却也不完全瞎说。闺蜜性情平和佛性,我苦苦挣扎修行半靠子,她生来就有。由人生就聊到最近我追的李子勋,李老师的观点:心理学讲人性多讲道德少,讲究有效性非真实性,很多观</div>
                    </li>
                    <li><a href="/article/1773538437832441856.htm"
                           title="200719:重拾优点?" target="_blank">200719:重拾优点?</a>
                        <span class="text-muted">问谁逝舟</span>

                        <div>小时候的哪些优点,现在想重新拾回?——题记:《惜福阅历(SisypheCalendar)》2020.01.04还是先来审题吧。这句话中的关键信息就在于“重拾小时候的优点”。小时候的优点,当然是在曾经的生活中,给我们带来过好处,有其被自己或是被社会认可的价值。而它跟“重拾”搭配在一起,就颇耐人寻味了。重拾,意味着曾经失落,也意味着它对当下还有价值。那么问题来了,既然曾经它是有价值的,既然对当下还有价</div>
                    </li>
                    <li><a href="/article/1773514238858428416.htm"
                           title="2022-2-13晨间日记" target="_blank">2022-2-13晨间日记</a>
                        <span class="text-muted">越亮也打烊</span>

                        <div>今天是什么日子起床:7:00就寝:12:08天气:晴心情:糟糕纪念日:无任务清单昨日完成的任务,最重要的三件事:寒假作业,网课,画画改进:作业时间剪短习惯养成:网课不逃~周目标·完成进度数学卷子100%学习·信息·阅读《傅雷家书》《钢铁是怎样炼成的》健康·饮食·锻炼我终于不喝饮料啦,喝茶~人际·家人·朋友邝姐姐带我吃火锅工作·思考啥时候开学,我还有几天赶完作业最美好的三件事1.卷子写完了2.我有冰</div>
                    </li>
                    <li><a href="/article/1773513860104388608.htm"
                           title="知道这些概念,你会变得越来越聪明" target="_blank">知道这些概念,你会变得越来越聪明</a>
                        <span class="text-muted">金海波</span>

                        <div>证实性偏差我们倾向于选择那些证实了我们的预期和假设的信息,同时倾向于忽视相反的信息。证实性偏见是选择性关注的实例。比如:从前有个人,丢了一把斧子。他怀疑是邻居家的儿子偷去了,便观察那人,那人走路的样子,像是偷斧子的;看那人的脸色表情,也像是偷斧子的;听他的言谈话语,更像是偷斧子的,那人的一言一行,一举一动,无一不像偷斧子的。不久后,丢斧子的人在上山的时候发现了他的斧子,第二天又见到邻居家的儿子,就</div>
                    </li>
                    <li><a href="/article/1773507537405018112.htm"
                           title="图论记录之最短路迪杰斯特拉" target="_blank">图论记录之最短路迪杰斯特拉</a>
                        <span class="text-muted">Just right</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%AE%BA/1.htm">图论</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>简述思想这个思想能用一句话来概括,精简到的极致:每次找到一个最短距离的点并更新起点到各个点的最短距离如果要可视化的话,B站搜索Dijksra算法,有视频讲解伪代码写到这里,其实是想整一个动画的,这样效果更好点,但由于种种原因所以就拖一下intdijkstr(){dist[1]=0;其余的点的距离全部初始化为真无穷,不要写成int的最大值迭代n次将不在s中的,且距离最近的点给tsj即先到t,再加上t</div>
                    </li>
                    <li><a href="/article/1773504784859463680.htm"
                           title="子非鱼,焉知鱼之乐" target="_blank">子非鱼,焉知鱼之乐</a>
                        <span class="text-muted">零启若</span>

                        <div>在如今网络爆飞信息发达的时代,我们会在各种论坛以及平台看到不计其数的评论,有一些人在评论的时候总是以高尚的道德为标准和底线去衡量,评判,甚至谩骂他人。并且觉得自己充满正义感,义正辞严。这些人姑且不说有没有考虑到别人的感受,更没有感同身受的体验,只是凭借着言论自由,甚至是一种猥琐和变相的心理发泄。就像人和动物一样,人类总是以高等动物自居,高高在上,并且认为人类吃食各种动物都是理所当然,动物就是给人吃</div>
                    </li>
                    <li><a href="/article/1773504261557125120.htm"
                           title="谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程" target="_blank">谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程</a>
                        <span class="text-muted">pigerr杨</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/drivers/1.htm">drivers</a>
                        <div>ChromeDriver官方网站GitHub||GoogleChromeLabs/chrome-for-testingChromeDriver113-125_JSONChromeforTestingavailability123-125zip白月黑羽Python基础|进阶|Qt图形界面|Django|自动化测试|性能测试|JS语言|JS前端|原理与安装</div>
                    </li>
                    <li><a href="/article/1773496455663779840.htm"
                           title="关于举办第十五届蓝桥杯全国软件和信息技术专业人才大赛项目实战赛的通知" target="_blank">关于举办第十五届蓝桥杯全国软件和信息技术专业人才大赛项目实战赛的通知</a>
                        <span class="text-muted">QSNKJJSW</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA/1.htm">无人机</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%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>
                        <div>各高等院校及相关单位:为贯彻落实《中国教育现代化2035》和《国务院关于印发新时期促进集成电路产业和软件产业高质量发展若干政策的通知》有关精神,为我国制造强国和网络强国战略提供人才支持,提高学生自主创新意识和工程实践能力,工业和信息化部人才交流中心决定举办第十五届蓝桥杯全国软件和信息技术专业人才大赛——项目实战赛。大赛连续四年入围中国高等教育学会“全国普通高校大学生竞赛排行榜”竞赛项目榜单。现将项</div>
                    </li>
                    <li><a href="/article/1773482860498452480.htm"
                           title="Golang标准库fmt深入解析与应用技巧" target="_blank">Golang标准库fmt深入解析与应用技巧</a>
                        <span class="text-muted">walkskyer</span>
<a class="tag" taget="_blank" href="/search/golang%E6%A0%87%E5%87%86%E5%BA%93/1.htm">golang标准库</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>Golang标准库fmt深入解析与应用技巧前言fmt包的基本使用打印与格式化输出函数Print系列函数格式化字符串格式化输入函数小结字符串格式化基本类型的格式化输出自定义类型的格式化输出控制格式化输出的宽度和精度小结错误处理与fmt使用fmt.Errorf生成错误信息fmt包与错误处理的最佳实践小结日志记录与fmtfmt包在日志记录中的应用结合log包使用fmt进行高级日志处理小结fmt与IOfm</div>
                    </li>
                    <li><a href="/article/1773465614472511488.htm"
                           title="eclipse导入项目 warning报错 org.springframework.ide.eclipse.core.springnature" target="_blank">eclipse导入项目 warning报错 org.springframework.ide.eclipse.core.springnature</a>
                        <span class="text-muted">zhangfeng1133</span>
<a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>报错org.springframework.ide.eclipse.core.springnature报错信息"org.springframework.ide.eclipse.core.springnature"通常表示EclipseIDE中与Spring框架集成的插件出现了问题。这个错误可能是因为SpringIDE插件没有正确安装或配置,或者Eclipse的更新过程中出现了问题。解决方法:确认S</div>
                    </li>
                    <li><a href="/article/1773457306437091328.htm"
                           title="MyBatis高级面试题-2024" target="_blank">MyBatis高级面试题-2024</a>
                        <span class="text-muted">my_styles</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a>
                        <div>MyBatis的核心组件有哪些?首先第一个是,SqlSessionFactory,它就像是一个会话工厂。它的任务是创建SqlSession对象,这个对象是我们与数据库交互的主要途径。SqlSessionFactory的作用很重要,因为它可以帮我们配置数据库连接信息和事务管理等。一旦这个工厂被建立起来,它就会加载一些必要的配置和映射文件,为后续的数据库操作提供一个可靠的基础。第二个是SqlSessi</div>
                    </li>
                    <li><a href="/article/1773449816127373312.htm"
                           title="生活中的很多事是既令人生气又令人伤感,但却还无可奈何" target="_blank">生活中的很多事是既令人生气又令人伤感,但却还无可奈何</a>
                        <span class="text-muted">城中隐士</span>

                        <div>今天一打开手机,就看到姨娘家的姐姐兰兰在抖音上发了一则信息,信息内容如下:“我绝对不是我爸妈亲生的,不知他们是从哪儿把我捡回来的”。图源网络,侵则必删今天一大早,天刚蒙蒙亮,姨父就着急莫慌给姨妈家姐姐来一电话,说是家里今天有急事,喊她赶紧回去。还没等姐姐反应过来,姨父就草草地挂断了电话。吓得姐姐立马清醒,以为家里不知出了多大的事?她赶紧从床上爬起来以最快速度第一时间从温江赶到中江。等她顶着烈日,风</div>
                    </li>
                    <li><a href="/article/1773442075023441920.htm"
                           title="27.Python从入门到精通—Python异常处理 抛出异常 用户自定义异常 定义清理行为 预定义的清理行为" target="_blank">27.Python从入门到精通—Python异常处理 抛出异常 用户自定义异常 定义清理行为 预定义的清理行为</a>
                        <span class="text-muted">以山河作礼。</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E2%80%94%E8%AF%A6%E8%A7%A3%E7%89%88/1.htm">Python基础入门—详解版</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>27.从入门到精通:Python异常处理抛出异常用户自定义异常定义清理行为预定义的清理行为异常处理抛出异常用户自定义异常定义清理行为预定义的清理行为异常处理在Python中,异常处理是一种处理程序在执行期间可能遇到的错误的方法。当Python解释器遇到错误时,它会引发异常。异常是一种Python对象,它包含有关错误的信息,例如错误类型和错误位置。为了处理异常,您可以使用try-except语句。在</div>
                    </li>
                    <li><a href="/article/1773439107398172672.htm"
                           title="解锁开心生命密码 NO.4" target="_blank">解锁开心生命密码 NO.4</a>
                        <span class="text-muted">糊糊陪你瑜伽</span>

                        <div>第四次的沟通是围绕着“何为真我”展开的。让我知道,原来真我的外面围了这么多层的“伪装”。真我-疗愈性事件-低层自我-信息系统-防御系统-面具自我,就是这样一层又一层的包裹让我们迷失了真我。谈到疗愈性事件,我甚至有点说不上来,尤其对童年的记忆是很模糊的,也说不上什么原因。通过分享三件自己的疗愈性事件,看到了事件发生时低层的自我,那是真我的反面。有这样低层的自我,形成了当时的信念系统和防御系统,才有了</div>
                    </li>
                    <li><a href="/article/1773432630256140288.htm"
                           title="沟通管理和相关方管理核心考点梳理" target="_blank">沟通管理和相关方管理核心考点梳理</a>
                        <span class="text-muted">WorkLee</span>
<a class="tag" taget="_blank" href="/search/PMP/1.htm">PMP</a><a class="tag" taget="_blank" href="/search/PMP/1.htm">PMP</a><a class="tag" taget="_blank" href="/search/%E6%B2%9F%E9%80%9A%E7%AE%A1%E7%90%86/1.htm">沟通管理</a><a class="tag" taget="_blank" href="/search/%E7%9B%B8%E5%85%B3%E6%96%B9/1.htm">相关方</a><a class="tag" taget="_blank" href="/search/%E5%B9%B2%E7%B3%BB%E4%BA%BA/1.htm">干系人</a>
                        <div>个人总结,仅供参考,欢迎加好友一起讨论PMP-沟通管理和相关方管理核心考点梳理沟通管理和相关方(干系人)管理这两章放在一起进行梳理,这两章很多的考点很容易混淆,经常会纠结于一些题目,究竟选择沟通管理还是干系人管理的知识点。沟通管理1)规划沟通管理沟通在PMP中是指信息流的传递,PM是根据谁的需求来确定这种信息流的传递方式、频率,内容、格式呢?解析:规划沟通管理是基于每个相关方或相关方群体的信息需求</div>
                    </li>
                    <li><a href="/article/1773430993756160000.htm"
                           title="C++ pdf 打印 插入图片" target="_blank">C++ pdf 打印 插入图片</a>
                        <span class="text-muted">灿烂李</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一:使用PODOFO给PDF插入图片:#includeintmain(){PoDoFo::PdfMemDocumentpdfDocument;PoDoFo::PdfPage*page;PoDoFo::PdfImageimage;PoDoFo::PdfVecObjects*vec_objects;PoDoFo::PdfRectrect;//打开PDF文档pdfDocument.loadFromFil</div>
                    </li>
                    <li><a href="/article/1773424826422198272.htm"
                           title="VGG16滤镜可视化和类激活图" target="_blank">VGG16滤镜可视化和类激活图</a>
                        <span class="text-muted">LIjin_1006</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%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/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/cnn/1.htm">cnn</a>
                        <div>这个用keras2.2.4+tensorflow1.15.0importkeraskeras.__version__fromkeras.applicationsimportVGG16fromkerasimportbackendasKimportnumpyasnpfromkerasimportmodelsimportmatplotlib.pyplotaspltimporttensorflowastf</div>
                    </li>
                    <li><a href="/article/1773419564567166976.htm"
                           title="人生最痛苦的不是失去,而是再也无能为力" target="_blank">人生最痛苦的不是失去,而是再也无能为力</a>
                        <span class="text-muted">子之为玉</span>

                        <div>图片发自App父亲去世37天了,姐姐发来信息说:给爸回家烧五七的时候,一进院子空荡荡的,心里真不好受!我无法说任何安慰的话给姐姐,因为我自己也很疼很疼,知道这种疼是任何言语都化解不了的,只能等待时间安抚各自的伤疼。于是我告诉姐姐:再难受的时候就给爸念佛吧,谁也不知道人是不是真的有灵魂,如果真的有呢?至少咱们还可以再帮爸做点什么!当父亲离开以后我才明白,最让我痛苦的不是他离开了,而是我再也不能为他做</div>
                    </li>
                    <li><a href="/article/1773408347479932928.htm"
                           title="直返APP是由哪个团队开发的?这个团队有哪些特点和优势?" target="_blank">直返APP是由哪个团队开发的?这个团队有哪些特点和优势?</a>
                        <span class="text-muted">日常购物技巧呀</span>

                        <div>关于直返的创始人以及直返APP属于哪个公司,目前没有确切的公开信息。不过,一些网友认为,直返这种商业模式可能由多个不同的公司或团队所创造和运营。【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,运行三年,稳定可靠。高省APP,是2021年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。高省是公认的返利最高的软件。古楼导师高省邀请</div>
                    </li>
                    <li><a href="/article/1773402791801323520.htm"
                           title="滴滴打车" target="_blank">滴滴打车</a>
                        <span class="text-muted">穆建园</span>

                        <div>听说滴滴又出事了,8月24日下午,浙江温州乐清市女孩赵某在虹桥镇乘坐滴滴顺风车前往永嘉县,在向朋友发送“救命”讯息后失联。8月25日,警方在柳市镇抓获犯罪嫌疑人钟某,该滴滴司机钟某交代了对赵某实施强奸,并将其杀害的犯罪事实。赵某的家人和朋友表示,在事发后曾多次联系滴滴方面索要司机具体信息,等到4小时候才得到最终反馈。据了解,事发前一天也曾有人向滴滴平台投诉该司机,但未被即时处理。对此,滴滴平台表示</div>
                    </li>
                    <li><a href="/article/1773389809448976384.htm"
                           title="项目管理工具最佳实践" target="_blank">项目管理工具最佳实践</a>
                        <span class="text-muted">水岩</span>

                        <div>各个公司的最佳实践去哪儿jira自定义使用1.jira编号对应git分支命名,后台增加监控程序,新增一个分支,自动解析分支中的jira编号,自动落地到数据库,完成映射2.各个发布系统间信息同步,消息中心(IC)+数据中心(DC),广播消息加一站式查询,持续集成,推进代码检查质量,分钟级反馈质量检查反思:1.项目管好:针对一线研发人员,简单易用,而不是满足管理层的“统计度量”(...)简化分类字段,</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>