批处理:文件夹内都是图片,想要提取文件夹内所有的文件名+修改时间(要含分秒)生成exce的XLSX格式?

工欲善其事,必先利其器。

我们测绘和地理信息行业在项目生产和处理数据过程中有有挺多问题要解决,掌握一些软件可以让解决某些问题事半功倍。

下面通过倾斜摄影模型生产的流程来串联一些软件,结合一些使用技巧简单介绍一下。

当然每个行业内从业者,可能都有自己的一套思路和处理方法。

我这一套可能也显得笨拙,仅抛砖引玉提出,供大家来交流学习。

倾斜摄影往往涉及到大量片子,包含在很多天飞的很多的架次,在这种情况下,我们有时需要对POS进行重命名,已区分不同日期,不同分区,不同架次的数据,同时解决照片重名的问题。

现在的5拼相机,一般都配有专门的导出软件,可以将照片和POS按架次导出来,照片命名一般为A0001.JPG,我们一般是在前面加日期和架次(或分区和架次)加以区分,这时要在Excel中用到&,如A5="120101"&A1.

关于Excel的其他小技巧可以参看这个:

有些特殊情况我们会遇到POS需要转换坐标系的情况,经纬度和平面的转换,不同分带之间的转换。

GlobalMapper可以很方便的进行各种坐标转换,具体操作如下:

直接将以上格式txt拖入GlobalMapper,根据txt不同的排列的排列方式,选择不同的设置引入

根据POS的坐标系选择正确的坐标系,就可以展出坐标了

上面txt格式POS是经纬度,可以转成平面POS,点击界面上的扳手工具,选择投影

转换前后参数如下图,转换后再将点导出就可以了

输出csv格式,里面就是平面坐标的POS了

在上面我们对POS进行了重命名,与之对应,我们也需要对影像进行重命名,像简单添加字段,我们可以用拖把更名器来更改,对应比较复杂的照片名更改,如有些航测项目要求照片名要表示航线号等,就需要用批处理命令来修改照片名。

新建一个EXCEL,整理如下

另存为.txt并放到要原始数据同级目录下,再将txt后缀改成bat,双击运行,即可以批量改照片名。

影像预处理的另一个方面就是对影像颜色的调整,匀色软件也比较多,这里讲一下PS调色的方法。具体可参考:

第二步,进行色阶,自动对比度,曲线,明暗等调节,然后点结束动作。

第三步,对目标文件进行批处理调节

控制点存在格式转换,度分秒转度,7参数转换等UltraEdit可以对txt按列进行修改(这个具体就不介绍了),笑脸是很强大的坐标转换软件,这两个软件使用都不复杂。坐标系问题可参考:

CC(Smart3D)现在的面对大批量的片子,空三还是很不稳定,这时候我们可以借助其他软件,用其他软件的空三导回到CC(Smart3D)里。

PhotoScan是一款基于影像自动生成高质量三维模型的优秀软件,这对于3D建模需求来说实在是一把利器。它对于部分相机空三运算正确率要比CC(Smart3D)高,其的空三成果可以导出CC(Smart3D)支持的空三文件,部分CC(Smart3D)没法跑过的空三可以用PhotoScan试试。

大疆智图是一款提供自主航线规划、飞行航拍、二维正射影像与三维模型重建的 PC 应用软件。它同样支持倾斜工程空三的导出,它的倾斜空三算法是很好的,一般只要算出来就没有问题。把下图中的选项勾上,空三完成后,输出目录就会有空三xml文件,可以导入CC(Smart3D)。

内容侵权 涉嫌营销 内容抄袭 违法信息 其他

已经收到您得举报信息,我们会尽快审核


exam_img/detail_abcs4_155_No.14.png 多 选 浏览和查看 对于下列工具的描述,正确 的是: 在使用A工具时按住Ctrl键可临时切 换到B工具 在使用B工具时按住Shift键可临 时切换到C工具 在使用C工具时按住空格键可 临时切换到D工具 在使用D工具时,在页面 上选择范围,在导览窗格显示内容 在使用 E工具时,在导览窗格选择 范围,在页面上显示内容 当前所选工具为A时, 按Ctrl + A 当前所选工具为B时,按Ctrl + A 当前所选工具为C时,按Ctrl + A 当前所 选工具为D时,按Ctrl + A 4 exam_img/detail_abcs4_155_No.32.png 单选 创建PDF表单 在添加页眉和页脚的对话框中, 如果对页眉和页脚的选项做如下设置(其它选 项用默认值),则页眉和页脚的最终效果分别 会是A、B图中的哪一个? AA AB BB BA 2 exam_img/detail_abcs4_155_No.37.png 单选 修改和增强PDF文档 如图所示:对图中4种工 具的相关描述,正确的是: 工具AC能用来 添加、修改文字内容 工具D能在鼠标指针处 插入文本内容 只有工具B能用来选择文本 工具BC都可用来选择文本 4 中的数据,判断这两点的实际距离是: 180 厘米 180毫米 90厘米 90毫米 1 exam_img/detail_abcs4_155_No.81-82.png 单选 浏览和查看 下图是利用测量工具对两 点间作距离测量时的属性栏,观查图中的数 据,这两点在文档页面上的距离是: 180厘米 180毫米 90厘米 90毫米 4 多选 安全性 下列关于安全性的描述,正 确的是: 可以从“文件>属性”或直接按Ctrl + D来查看或修改文档的安全设置 文档安全性 可以限制打开、编辑和打印文档,还可限制文 档中多媒体的播放 必须有正确的密码,才能 在Acrobat5.0中打开Acrobat 9.0兼容性的PDF 文档 包含“文档打开口令”和“许可口令” 两种口令的文档,用户必须输入“文档打开口 令”才能打开 PDF 文档 “另存为已验证的 文档”后,在保留签名的状态下,只要拥有正 确的密码即可修改安全设置 1,2 单选 安全性 下列哪种格式的文件可以 嵌入安全信封中作为电子邮件的附件发送? 任意 PDF 非PDF 以上均不对 1 多选 创建PDF表单 下列有关添加页眉和 页脚的描述,正确的是: 执行过该命令的旧 文档,可以重复使用“添加页眉和页脚”对话 框来进行新页眉和页脚的添加 不同于页面缩 略图导览窗格中的编

1:字符串如何倒序输出?


  SessionFactory在Hibernate中实际上起到了一个缓冲区的作用 他缓冲了HIbernate自动生成SQL语句和其他的映射数据 还缓冲了一些将来有可能重复利用的数据.

  SessionFactory用到了工厂模式 用户程序从工程类SessionFactory取得Session实例 设计者的意图就是让它能在整个应用中共享 典型的来说 一个项目通常只需要一个SessionFactory就够了.


同步处理就不一样了,说话后在吃饭,吃完饭后在看手机,必须等待上一件事完了,才执行后面的事情 
比方说一个人边吃饭,边看手机,边说话,就是异步处理的方式。 

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。


 22:数据如何在后台校验,如:邮箱,手机号,身份证号等?


  2: 用#{}方式能够很大程度防止sql注入,$方式无法防止Sql注入。

  3:一般能用#的就别用$。

46:内存溢出是什么? 对象有被指向的引用,但是再也用不到它就是内存溢出了


轻量级,同样起web 服务,比apache 占用更少的内存及资源 
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单 
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 
13 
【试题1】缺省安装的 nginx + php-fpm 环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途关闭了浏览器,那么请问服务端的 php 脚本是继续执行还是退出执行?

【解答】正常情况下,如果客户端client异常退出了,服务端的程序还是会继续执行,直到与IO进行了两次交互操作。服务端发现客户端已经断开连接,这个时候会触发一个user_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。

14【试题2】首先,Nginx 日志格式中的 $time_local 表示的是什么时间?请求开始的时间?请求结束的时间?其次,当我们从前到后观察日志中的 $time_local 时间时,有时候会发现时间顺序前后错乱的现象,请说明原因。

【解答】$time_local:在服务器里请求开始写入本地的时间,因为请求发生时间有前有后,所以会时间顺序前后错乱


    setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。

    setInterval方法则是表示间隔一定时间反复执行某操作。





1:异步生成Excel,非实时,完成后使用某种方式通知用户,每次刷新页面获取最新状态、长连接方式实时通知

3:生成多个excel文件,并打包成zip文件。

4:后台使用多线程去下载,分别生成excel文件,然后再合并。


 116:共享线程存在jvm 的哪一块?生命周期呢?


 117:事物的隔离级别,传播特性?

事务的隔离级别也分为四种,由低到高依次分别为:read uncommited(读未提交)、read commited(读提交)、read repeatable(读重复)、serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题

  1. read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
  2. read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
  3. repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
  4. serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读。

spring事务传播特性:

事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。spring支持7种事务传播行为:

  propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。

  propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。

  propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。

  propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。

  propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。

  propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作


  获取 Class 类对象有三种方法:

第一种,使用 Class.forName 静态方法。当你知道该类的全路径名时,你可以使用该方法获取 Class 类对象。

第二种,使用 .class 方法。

这种方法只适合在编译前就知道操作的 Class。

第三种,使用类对象的 getClass() 方法。


         当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例;

      1、不要在controller中定义成员变量。 
      2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式 


 120:怎么创建视图? 存储过程? 约束有哪些?

视图:实际上视图就是一个命名的查询;也就是把一个查询语句的查询结果做成一个临时表,然后从这个临时表中查询相关的数据;  注意:视图都是和一个有效的查询语句绑定在一起的!

  1.可以加快开发的速度,但是并不能提高查询的速度 ,如果一个查询结果经常被使用到,我们就应该把这个查询语句做成一个视图,加快开发的速度。
  2.可以隐藏数据的真实来源;

注意:Mysql 中创建视图的注意事项:视图绑定的查询语句中,不能有出现在FROM后面的子查询! oracle对此不要求 

  Mysql存储过程
    1:使用存储过程可以极大的提高数据的处理能力;

   2:存储过程的缺点:在不同的数据库中,存储过程的语法都是不同的!也就是是,只要使用了存储过程,会导致我的程序无法移植;

   创建存储过程的语法 

参数的输入/输出类型 参数名称 参数的数据类型; 多个参数之间使用逗号分隔
参数的输入/输出类型分为三类
  (1)IN类型:可以把外界的数据传递给过程,这是默认的类型
  (2)OUT类型:可以把过程中的计算机结果返回给外界
  (3)INOUT类型:既可以传入数据,也可以穿出计算结果

在声明参数的数据类的时候,不需要指明数据的长度,只需要声明类型即可

例1:创建一个存储过程,查询EMP表的数据总数并且返回查询结果

       第三步:SELECT @num;   我们调用存储过程之后,过程中的计算结果会通过OUT类型参数返回,查询out类型的参数的结果

   例2:创建一个存储过程,完成把两个参数相加并且返回结果的功能






 125:优化?数据库优化?

  1.考虑使用视图View
   第一次多张表连接查询之后将查询结果当作视图对象创建,下一次再查询的时候不需要进行表连接查询,直接查询视图.
  2.给某些字段添加索引index,什么时候考虑添加索引呢?



  在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

  socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。 




130:变量分类?都存在哪个区?

   2 以声明的位置为依据划分

  2.1 -实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null  

  作用域与对应实例的生存范围相同

    访问修饰符可以修饰实例变量。

  作用域与这个类的生存范围相同

   2.2 局部变量 —— 方法、构造方法或语句块里定义的变量  (保存在栈区)
        
-访问修饰符不能用于局部变量

            -局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用



值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

而在JAVA中只有值传递,基本类型传递的是值的副本,引用类型传递(不是上面说的引用传递)的是引用的副本


  多线程间的通信一般采取等待/通知机制进行实现,Java中在使用synchronized关键字实现的同步方法或同步代码块中,由被上锁的对象调用其自身的wait()方法和notify()方法以及notifyAll()方法,进行实现等待/通知机制.

  注意以下事项: 
    一、wait()方法和notify()方法以及notifyAll()方法的使用必须在同步方法或者同步代码块中,因为这三个方法需要获得监视器对象的对象级别的锁

    二:wait()方法的调用有两个作用:1、使当前线程由运行状态变为等待状态;2、释放当前线程持有的锁;

    三、notify()方法调用只有一个作用:唤醒因为wait()或await()而处于等待状态的线程;




1、HttpServletRequest的 request对象 作用:代表请求对象,用来接收客户端通过http协议连接传输到服务器端的数据。

4、HttpSession 的session 对象  作用:主要用于来分别保存每个用户的个人信息,与请求关联的对话。会话状态的维持是每个web应用开发者都必须面对的问题。

  作用:主要用于保存用户信息,代码片断的运行环境。它是一个共享的内置对象。即一个容器中多个用户共享一个application对象,故其保存的信息被所有的用户所共享。

6、PageContext的PageContext对象   作用:管理网页的属性,为jsp页面包装页面的上下文,管理对属于jsp中特殊可见部分中已经命名对象的访问。它的创建和初始化的工作都是由容器来自动完成的。

在JSP中提供了四种属性保存范围 

page:在一个页面内保存属性,跳转之后无效
request:在一次服务请求范围内,服务器跳转后依然有效
session:-在一次会话范围内,无论何种跳转都可以使用,但是新开浏览器无法使用
application:在整个服务器上保存,所有用户都可以使用 



若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。

 锁包括行级锁、表级锁、悲观锁、乐观锁







一:表中的数据不能重复,每个字段不可再分。

2: 建立在第一范式上,表中的非主键字段必须全部依赖主键,不能部分依赖主键

3  建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。


 145 GC  Java虚拟机中进行垃圾回收的场所有两个,一个是堆,一个是方法区



1. 内存泄漏是指分配出去的内存无法回收了。

2. 内存溢出是指程序要求的内存,超出了系统所能分配的范围,从而发生溢出。比如用byte类型的变量存储10000这个数据,就属于内存溢出。

3. 内存溢出是提供的内存不够;内存泄漏是无法再提供内存资源。

  引起内存溢出的原因有很多种,常见的有以下几种:

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;





Array 数组可以包含基本类型和对象类型,
Array 数组在存放的时候一定是同种类型的元素。ArrayList 就不一定了 。

Array 数组的空间大小是固定的,所以需要事前确定合适的空间大小。
ArrayList 的空间是动态增长的,而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。



MYSQL的事务处理主要有两种方法



  这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。start()方法被用来启动新创建的线程,而且start()内部 调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启 动,start()方法才会启动新线程。


  volatile是一个特殊的修饰符,只有成员变量才能使用它。在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的。volatile变量可以保证下一个读取操作会在前一个写操作之后发生。

  Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。


 159 如何在两个线程间共享数据?

  你可以通过共享对象来实现这个目的,或者是使用像阻塞队列这样并发的数据结构。这篇教程(涉及到在两个线程间共享对象)用wait和notify方法实现了生产者消费者模型。

  什么是线程安全? 如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的.

 有三个线程T1,T2,T3,怎么确保它们按顺序执行?

  在多线程中有多种方法让线程按特定顺序执行,你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成。

  Yield方法可以暂停当前正在执行的线程对象,让其它有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证使其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。

    使用volatile关键字修饰的变量,保证了其在多线程之间的可见性,即每次读取到volatile变量,一定是最新的数据。

    这是个有趣的问题。首先,volatile 变量和 atomic 变量看起来很像,但功能却不一样。Volatile变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用volatile修饰count变量那么 count++ 操作就不是原子性的。而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性 的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。

  如果同步块内的线程抛出异常会发生什么?

  这个问题坑了很多Java程序员,若你能想到锁是否释放这条线索来回答还有点希望答对。无论你的同步块是正常还是异常退出的,里面的线程都会释放锁,所以对比锁接口我更喜欢同步块,因为它不用我花费精力去释放锁,该功能可以在里释放锁实现

  Java中的同步集合与并发集合有什么区别?

  同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。在Java1.5之前程序员们只有同步集合来用且在 多线程并发的时候会导致争用,阻碍了系统的扩展性。Java5介绍了并发集合像ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分 区等现代技术提高了可扩展性。

   Java中堆和栈有什么不同?

  为什么把这个问题归类在多线程和并发面试题里?因为栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈 调用,一个线程中存储的变量对其它线程是不可见的。而堆是所有线程共享的一片公用内存区域。对象都在堆里创建,为了提升效率线程会从堆中弄一个缓存到自己 的栈,如果多个线程使用该变量就可能引发问题,这时volatile 变量就可以发挥作用了,它要求线程从主存中读取变量的值。

  什么是线程池? 为什么要使用它?

  创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时 候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短 的任务的程序的可扩展线程池)

多线程有什么用?1)发挥多核CPU的优势
2)防止阻塞3)便于建模Java 中 volatile 关键字是什么?你如何使用它?它和 Java 中的同步方法有什么区别?

  你在多线程环境中遇到的最多的问题是什么?你如何解决的?

  内存干扰、竞态条件、死锁、活锁、线程饥饿是多线程和并发编程中比较有代表性的问题。这类问题无休无止,而且难于定位和调试。

  线程和进程有什么区别?

  线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据

  Java 中线程调度是什么?

 ThreadLoal的作用是什么? 
  
简单说ThreadLocal就是一种以空间换时间的做法在每个Thread里面维护了一个ThreadLocal.
ThreadLocalMap把数据进行隔离,
数据不共享,自然就没有线程安全方面的问题了
你有哪些多线程开发良好的实践?

  优先使用并发容器而非同步容器.

  Java 中可以创建 volatile类型数组,不过只是一个指向数组的引用,而不是整个数组。如果改变引用指向的数组,将会受到volatile 的保护,但是如果多个线程同时改变数组的元素,volatile标示符就不能起到之前的保护作用了

  线程怎样拿到返回结果?

  怎么终止一个线程?如何优雅地终止线程?

 多线程同步有哪几种方法?五种。

  即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

   即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

  使用特殊域变量(volatile)实现线程同步

(1)volatile关键字为域变量的访问提供了一种免锁机制;

(2)使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新;

(3)因此每次使用该域就要重新计算,而不是使用寄存器中的值;

(4)volatile不会提供任何原子操作,它也不能用来修饰final类型的变量。

  volatile不能保证原子操作导致的,因此volatile不能代替synchronized。此外volatile会组织编译器对代码优化,因此能不使用它就不使用它吧。它的原理是每次要线程要访问volatile修饰的变量时都是从内存中读取,而不是从缓存当中读取,因此每个线程访问到的变量值都是一样的。这样就保证了同步

  使用重入锁实现线程同步

   如果synchronized关键字能满足用户的需求,就用synchronized,因为它能简化代码 。如果需要更高级的功能,就用ReentrantLock类,此时要注意及时释放锁,否则会出现死锁,通常在finally代码释放锁

     如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。现在明白了吧,原来每个线程运行的都是一个副本,也就是说存钱和取钱是两个账户,只是名字相同而已。所以就会发生上面的效果

  多线程之间如何进行通信?

 常用的几种线程池并讲讲其中的工作原理?
线程池启动线程submit()和execute()方法有什么不同?
什么是守护线程?有什么用?

 怎么中断一个线程?如何保证中断业务不影响?

  一个线程运行时发生异常会怎样?

  线程数过多会造成什么异常?

  说说线程安全的和不安全的集合。

怎么检测一个线程是否拥有锁?

线程同步需要注意什么?

线程之间如何传递数据?

多线程上下文切换是什么意思?

同步方法和同步块,哪种更好?

如何在Java中获取线程堆栈?

如何创建线程安全的单例模式?

提交任务时线程池队列已满会时发会生什么?

  如何解决线程安全问题?
    -尽量使用局部变量
    -如果使用了实例变量,让对象变成多例
    -如果使用了实例变量,加synchronized关键字进行修饰

  161 排序 二分法?冒泡排序?

164 表被锁后,怎么处理?


 Count(*)表示取得所有记录,忽略null,为null值也会取得。

采用count(字段名称),不会取得为null的纪录。


我要回帖

更多关于 图片批量放入不同文件夹bat 的文章

 

随机推荐