Amp

做一个完整的Java Web项目需要掌握哪些技术?

混江龙づ霸主 提交于 2020-07-28 03:26:44
做一个完整的Java Web项目需要掌握哪些技术? 2017-12-19 10:39:41 来源: Deamon Thread 收藏 我要投稿 最近自己做了几个 Java Web项目,有公司的商业项目,也有个人做着玩的小项目,写篇文章记录总结一下收获,列举出在做项目的整个过程中,所需要用到的技能和知识点,带给还没有真正接触过完整javaWeb项目的同学一个比较完整的视角,提供一个所谓的“大局观”,也以便于同学们更有针对性地学习。当然,这里所用到的例子项目是非常初级,简单的项目,所以大神们就可以不用往下看了。 首先我们从网站的架构谈起。一般来说,我们将网站分为前端和后端。前端主要负责页面的展示,后端则是业务逻辑的实现。由于HTML5的兴起,前端领域已经越来越火热,前端技术发展极快,今天我们不做过多介绍,因为现在的互联网公司,前端工程师和Java工程师是完全不同的两种技术岗位。所以我们还是以Java的角度去看待一个项目。在前端没有那么火的前几年,或者说在经典的Java Web的开发模式中,我们使用Jsp技术来作为展现层的实现,其实也就是所谓的前端。当然只懂得Jsp是不够的还需要懂html,css,js,ajax等一些前端的基础技术,Jsp技术在其中扮演外层包装的角色。那么后端呢?后端是由于一些实现了业务逻辑Java代码和 数据库 组成。说到这,就可以推出Web开发中经典的MVC模式

java并发编程 -CountDownLatch和CyclicBarrier在内部实现和场景上的区别

霸气de小男生 提交于 2020-07-28 02:58:32
前言 CountDownLatch和CyclicBarrier两个同为java并发编程的重要工具类,它们在诸多多线程并发或并行场景中得到了广泛的应用。但两者就其内部实现和使用场景而言是各有所侧重的。 内部实现差异 前者更多依赖经典的AQS机制和CAS机制来控制器内部状态的更迭和计数器本身的变化,而后者更多依靠可重入Lock等机制来控制其内部并发安全性和一致性。 public class { //Synchronization control For CountDownLatch. //Uses AQS state to represent count. private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; Sync(int count) { setState(count); } int getCount() { return getState(); } protected int tryAcquireShared(int acquires) { return (getState() == 0) ? 1 : -1; } protected boolean

在CentOS8中设置SSH密钥

↘锁芯ラ 提交于 2020-07-28 02:58:14
最流行的两种SSH身份验证机制是基于密码的身份验证和基于公钥的身份验证。使用SSH密钥通常比传统的密码身份验证更安全和方便。 环境 客户端: CentOS 8 192.168.43.137 服务端:CentOS8 192.168.43.139 创建SSH公私钥 通过输入以下 命令 ,生成新的4096位的SSH密钥对: [root@localhost ~]# ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:ycOtSDK8ud2kd6EH7OxoQuc1BFb1HJ3T/kvAQJt0LrI root@localhost.localdomain The key

【融职培训】Web前端学习 第8章 egg基础教程3 控制器

血红的双手。 提交于 2020-07-28 01:47:36
在学之前我们先了解一下什么是Controller 简单的说Controller负责解析用户的输入,处理后返回相应的结果,如 在RESTful接口中,控制器接受用户的参数,从数据库中查找内容返回给用户或将用户的请求更新到数据库中。 在HTML页面请求中,Controller根据用户访问不同的URL,渲染不同的模板得到HTML返回给用户。 在代理服务器中,控制器将用户的请求转发到其他服务器上,变为其他服务器的处理结果返回给用户。 一,创造控制器 app/controller/ 是创建Controller的文件夹,或者我要合并一个首页或是基础页面的 HomeController 。 创建 HomeController 首先约会app.Controller和导出 HomeController 。 如果熟悉koa2的语法,使用ctx某些则非常方便,渲染模板 await this.ctx.render('home/index') 直接即可。 二,请求与响应 框架通过在Controller上绑定的Context实例,提供了许多便捷方法和属性获取用户通过HTTP请求发送过来的参数。 询问 在URL中 ? 后面的部分是一个 Query String ,该部分经常用于GET类型的请求中传递参数。例如 GET /search?name=egg&age=26 中 name=egg&age=26

Android“只有创建视图层次结构的原始线程才能触摸其视图。”

落花浮王杯 提交于 2020-07-28 01:46:42
问题: I've built a simple music player in Android. 我已经在Android中构建了一个简单的音乐播放器。 The view for each song contains a SeekBar, implemented like this: 每首歌曲的视图都包含一个SeekBar,实现如下: public class Song extends Activity implements OnClickListener,Runnable { private SeekBar progress; private MediaPlayer mp; // ... private ServiceConnection onService = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder rawBinder) { appService = ((MPService.LocalBinder)rawBinder).getService(); // service that handles the MediaPlayer progress.setVisibility(SeekBar.VISIBLE); progress

读取文件,将文件中的数据一行行的取出。

南笙酒味 提交于 2020-07-28 01:11:46
方式1:   通过BufferedReader的readLine()方法。 /** * 功能:Java读取txt文件的内容 步骤: *1:先获得文件句柄 *2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取 *3:读取到输入流后,需要读取生成字节流 *4:一行一行的输出。readline()。 *备注:需要考虑的是异常情况 * * @param filePath * 文件路径[到达文件:如: c:\x.txt] * @return 将这个文件按照每一行切割成数组存放到list中。 */ public static List<String> readTxtFileIntoStringArrList(String filePath) { List<String> list = new ArrayList<String>(); try { String encoding = "GBK"; File file = new File(filePath); if (file.isFile() && file.exists()) { // 判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding);// 考虑到编码格式 BufferedReader

微软用 AI 取代人工编辑,解雇多名新闻工作者

為{幸葍}努か 提交于 2020-07-27 23:15:05
  微软将解雇 Microsoft News 和 MSN 团队中的数十名新闻工作者和编辑人员。大部分受影响的员工属于 Microsoft SANE(搜索、广告、新闻、Edge 浏览器)部门。   近几个月来,微软在其新闻业务方面逐渐转向 AI,并鼓励出版商和新闻工作者运用人工智能。该公司依靠 AI 来挑选 MSN、Microsoft Edge 浏览器内以及 Microsoft News 应用程序中呈现的新闻与内容。   微软发言人在一份声明中表示:“像所有公司一样,我们会定期评估我们的业务。这可能会导致在某些方面增加投资,有时会在其他业务上重新部署。这些决定并不是受疫情影响而作出的。”    Business Insider 上周五报道 了微软裁员的消息,该公司在美国约有 50 个工作岗位受影响。 据卫报消息 ,在微软决定停止雇用人工编辑来管理其主页资讯后,大约有 27 名员工在英国被裁。 来源: oschina 链接: https://my.oschina.net/u/4436414/blog/4298018

什么是云原生?这回终于有人讲明白了

孤街醉人 提交于 2020-07-27 22:25:44
伴随云计算的滚滚浪潮,云原生(CloudNative)的概念应运而生,云原生很火,火得一塌糊涂,都0202年了,如果你还不懂云原生,那真的out了。 大家言必称云原生,却鲜少有人告诉你 到底什么是云原生 ,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这不一定是事实,但这样的思考方式能让我避免陷入自我怀疑的负面情绪。 云原生之所以解释不清楚,是因为云原生没有确切的定义 ,云原生一直在发展变化之中,解释权不归某个人或组织所有。 何谓云原生? 技术的变革,一定是思想先行, 云原生是一种 构建和运行应用程序的方法 ,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计, 在云上以最佳姿势运行 ,充分利用和发挥云平台的弹性+分布式优势。 Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt

常见排序算法(待补充)

▼魔方 西西 提交于 2020-07-27 20:53:25
排序算法的分类: 常用排序的时间及空间复杂度: 排序算法的稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 -------------------------------------------------------------------------------------------------- 交换排序: ① 冒泡排序 排序原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现: 时间复杂度及稳定性: 时间复杂度: O(n2) 【最好、最坏、平均情况都是】 稳定性:稳定的 优缺点: 优点:比较简单,空间复杂度较低,是稳定的; 缺点:时间复杂度太高,效率慢; ② 快速排序(分治法) 排序原理:双指针法 先从数列中取出一个数作为基准数(比如第一个位置上的数)。 设置左右两个指针i,j,两个指针分别向从左右向对面移动

数据结构与算法之美_38_分治算法:谈一谈大规模计算框架MapReduce中的分治思想

别说谁变了你拦得住时间么 提交于 2020-07-27 14:43:40
MapReduce 是 Google 大数据处理的三驾马车之一,另外两个是 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的计数中都有大量的应用。 MapReduce 的本质就是分治算法。 如何理解分治算法? 分支算法(divide and conquer)的核心思想就是,分而治之,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后在合并其结果,就得到原问题的解了。 这个定义看起来有点类似递归的定义。关于分支与递归的区别,分支算法是一种处理问题的思想,递归是一种编程技巧。实际上,分治算法一般都比较适合用帝归来实现的。 分治算法的递归实现中,每一层递归都会涉及这样三个操作: 分解:将原问题分解成一系列子问题; 解决:递归地求解各个子问题,若子问题足够小,则直接求解; 合并:将子问题的结果合并成原问题。 分治算法能解决的问题,一般需要满足下面这几个条件: 原问题与分解成的小问题有相同的模式; 原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别; 具有分解终止条件,也就是说,当问题足够小时,可以直接求解; 可以将子问题合并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果了。 分支算法应用举例分析