分类: 编程语言

Java面试题(7)- 线程安全

Java面试题(7)- 线程安全

整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:说说如何保证线程安全;如何实现一个线程安全的数据结构;volatile关键字的作用是什么;Java并发包提供了哪些并发类;HashMap在多线程环境下使用需要注意什么,为什么;ThreadLocal的作用与实现原理是什么;ThreadPoolExecutor的实现原理是什么;什么是死锁,如何避免死锁;Atomiclnteger的实现原理是什么。

Java面试题(6)- 多线程

Java面试题(6)- 多线程

整理一些Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:说说有几种方法创建线程,各自的优缺点是什么;启动一个线程是用run还是start;说说线程和进程的差别是什么;说说守护线程有什么用;如何实现两个线程串行执行;一个线程调用Start()两次会怎么样;谈谈线程的生命周期和状态转移;线程的sleep和wait方法有什么区别;线程的notify和notifyAll有什么区别;上下文切换是什么含义。

Java面试题(5) – 数据结构与算法

Java面试题(5) – 数据结构与算法

整理一些来自网络的Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:说说常见的排序算法和复杂度;如何实现一个冒泡排序算法;如何遍历一棵二叉树;如何倒排链表;如何递归遍历目录下面所有文件;描述一下链式存储结构,并用代码实现双向链表。

Java面试题(2) – 体系结构

Java面试题(2) – 体系结构

整理一些来自网络的Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:Java的抽象类和接口的区别是什么;谈谈你对Java体系的理解;谈谈类加载过程和双亲委派模型;谈谈强引用、软引用、弱引用、幻象引用的区别,使用场景是什么; 有人说“Lambda能让Java慢30倍”,你怎么看;Java反射机制、动态代理基于什么原理;如何写出安全的Java代码。

Java面试题(1) – 语言基础

Java面试题(1) – 语言基础

整理一些来自网络的Java基础面试题,内容涵盖语言基础、并发、JVM、IO模型、中间件、开发框架等等。本章节的面试题有:一个字符占多少个字节,int、long、double占多少字节;Java中的异常有哪几类,分别怎么使用;什么是序列化,如何实现序列化;int和Integer有什么区别?Integer值缓存范围是什么。

彻底理解协程

彻底理解协程

协程不是操作系统的底层特性,系统感知不到它的存在。它运行在线程里面,通过分时复用线程的方式运行,不会增加线程的数量。协程也有上下文切换,但是不会切换到内核态去,比线程切换的开销要小很多。每个协程的体积比线程要小得多,一个线程可以容纳数量相当可观的协程。在IO密集型的任务中有着大量的阻塞等待过程,协程采用协作式调度,在IO阻塞的时候让出CPU,当IO就绪后再主动占用CPU,牺牲任务执行的公平性换取吞吐量。

彻底理解线程

彻底理解线程

操作系统支持多个应用程序同时执行,每个应用至少对应一个进程,彼此之间的操作和数据不受干扰。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程去执行,提高了CPU利用率。CPU在不同的进程之间切换执行,任务多的时候一直处于工作状态。有了进程,为什么还要线程?因为进程的成本太高了。启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。如果两个进程之间需要通信,要采用管道通信、消息队列、共享内存等等方式。线程可以看作轻量化的进程,或者粒度更小的进程。线程之间使用相同的地址空间,切换线程的时间远远小于切换进程的时间。一个进程的开销大约是线程开销的30倍左右。

ASP已老,尚能饭否?

ASP已老,尚能饭否?

我对ASP的感情,跟大海一样深。我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是《毕业设计管理系统》(是不是有点绕)。在 PHP 和 ASP.NET、Java 高歌猛进的今天,许多90和00后程序员对ASP比较陌生了。1996年微软公司推出 ASP(Active Server Page),很快成为中小型网站开发的首选。许多企业的门户网站和中小型新闻网站都采用基于ASP开发的内容管理系统。用友软件公司早期几款安身立命的ERP软件,也是采用ASP开发。

基于数据库号段模式实现分布式ID

基于数据库号段模式实现分布式ID

唯一ID是业务系统操作数据的重要凭据。如果是单表,采用数据表的自增主键作为唯一ID即可。在分布式和高并发场景下,数据快速增长,单表可能被拆成多表,如果使用自增主键作为唯一ID,每个表都要设置不同的增长步长,不便于数据库扩展。本文主要介绍基于数据库号段模式实现分布式ID。

如何开发两步验证功能

如何开发两步验证功能

两步验证,是指用户登录账户的时候,除了要输入用户名和密码,还要求用户输入一个动态密码,为帐户添加了一层额外保护。这个动态密码要么是专门的硬件,要么由用户手机APP提供。即使入侵者窃取了用户密码,也会因不能使用用户手机而无法登录帐户。