首页 文章 精选 留言 我的

精选列表

搜索[软件工程],共2506篇文章
优秀的个人博客,低调大师

第 2 章 软件工程 (Software Engineering)

目录 2.1. Open Source and License 2.1.Open Source and License GPL 你可以免费使用,但修改后必须开源。 GPLv3 你可以免费使用,但修改后必须开源,不允许加入闭源商业代码。 BSD 你可以免费使用,修改后可不开源,基本上你可以我所欲为。 Linux 中有许多BSD代码,但BSD却不能移植Linux 代码到BSD中,这是因为GPL License。 http://www.apache.org/licenses/ Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>comments powered by Disqus 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

优秀的个人博客,低调大师

Java高级软件工程师面试考纲

如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。 当前,市面上有《Java XX宝典》类似的图书,而且图书中的内容都着重在讲解Java最为基础的部分,最严重的是,里面有着大量错误的内容,极具误导性。另外,网上也有各种各样的Java面试题,很多也是着重在Java语言基础上。实际上,如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。 1 Java基础 1.1 Collection和Map (1)掌握Collection和Map的继承体系。 (2)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特点和实现原理。 (3)掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的实现原理和适用场景。 1.2 IO (1)掌握InputStream、OutputStream、Reader、Writer的继承体系。 (2)掌握字节流(FileInputStream、DataInputStream、BufferedInputStream、FileOutputSteam、DataOutputStream、BufferedOutputStream)和字符流(BufferedReader、InputStreamReader、FileReader、BufferedWriter、OutputStreamWriter、PrintWriter、FileWriter),并熟练运用。 (3)掌握NIO实现原理及使用方法。 1.3 异常 (1)掌握Throwable继承体系。 (2)掌握异常工作原理。 (3)了解常见受检异常(比如FileNotFoundException)、非受检异常(比如NullPointerException)和错误(比如IOError)。 1.4 多线程 (1)掌握Executors可以创建的三种(JAVA8增加了一种,共四种)线程池的特点及适用范围。 (2)掌握多线程同步机制,并熟练运用。 1.5 Socket (1)掌握Socket通信原理。 (2)熟练使用多线程结合Socket进行编程。 2 Java虚拟机 2.1 JVM内存区域划分 (1)掌握程序计数器、堆、虚拟机栈、本地方法栈、方法区(JAVA8已移除)、元空间(JAVA8新增)的作用及基本原理。 (2)掌握堆的划分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。 (3)掌握JVM内存参数设置及调优。 2.2 类加载 (1)掌握类的加载阶段:加载、链接(验证、准备、解析)、初始化、使用、卸载。 (2)掌握类加载器分类及其应用:启动类加载器、扩展类加载器、应用程序类加载器、自定义加载器。 3 J2EE (1) 掌握JSP内置对象、动作及相关特点和工作原理。 (2) 掌握Servlet的特点和工作原理。 (3) 掌握Spring框架的IOC和AOP实现原理(反射和动态代理)。 (4) 至少掌握一个MVC框架(Spring MVC,Struts等)的工作原理,并熟练运用。 (5) 至少掌握一个ORM框架(Hibernate,MyBatis等)的工作原理,并熟练运用。 4 数据结构与算法 (1)掌握线性表和树的特点并熟练运用。 (2)掌握常用排序和查找算法:插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序,顺序查找、二分查找、哈希查找。 (3) 熟练运用常见排序和查找算法思想解决编程问题。 (4)了解几大基本算法:贪心算法、分治策略、动态规划。 5 计算机网络 (1)掌握网络的分层结构,及每层的功能特点。 (2)掌握TCP/IP的通信原理(三次握手、四次挥手) 6 数据库 (1)掌握复杂的SQL语句编写。 (2)掌握数据库的优化(SQL层面和表设计层面)。 (3)至少掌握一款数据库产品。 (4)熟悉高并发、大数据情况下的数据库开发。 7 Web技术 (1)掌握AJAX的工作原理。 (2)至少熟悉一款JS框架(比如JQuery)。 8设计模式 (1)熟悉常见的设计模式。 (2)会将设计模式理论应用到实际开发中。 9 Linux (1)熟练运用Linux常见命令。 (2)熟悉Linux操作系统基本概念及特点。 (3)熟悉Shell脚本。 10 操作系统 (1)掌握操作系统的进程管理。 (2)了解操作系统的I/O。 11 正则表达式 (1)掌握常见正则表达式符号。 (2)熟练运用正则表达式解决实际问题(比如匹配电话号码、邮箱、域名等)。 \1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。 2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。 3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加群。 4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加群。 5.群号744677563Java高级开发 6.阿里Java高级大牛直播讲解知识点,分享知识,上面五大专题都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

优秀的个人博客,低调大师

软件工程—让软件包自带commit id

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78118930 软件开发中软件版本号是一个重要的概念,而对于工程师软件版本号所对应的git(svn)commit id则更重要,嵌入式固件,移动端app开发中,理想的情况下是我拿到一个固件包,或者一个嵌入式设备,或者手机app,我们需要准确的找到该软件版本对应的commit id,如何来做最准确以及最方便:让软件包自带commit id。 Linux kernel的做法: 不得不说linux kernel的很多做法思想是十分完善以及超前的,linux kernel会在build过程中将git(svn)的当前commit id写入内核image中,使内核image自带commit id,如何操作请自行搜索。 (android手机用户,可以查看设置->关于手机->内核版本,工程师应该对gxxxxx很敏感,xxxxx就是对应的git commit id) 嵌入式开发中常用的做法: 由于笔者从事了8年嵌入式开发,对这个做法可以说得心应手,嵌入式开发是一个自由度很高的行业,没有很多完善的轮子,同时由于linux的简约的思想,开发者可以十分自由的创作自己的构建流程(就如同c语音一样,自由灵活,虽然有些lib库没有其他高级语言完善丰富,但是它几乎无所不能,很少束缚开发者。) 这部分也不做过多说明,linux系统工程师应该很容易写出一个获取Git commit id并写入固件image的构建脚本。(有太多方式了,自由发挥吧) Android app开发中的做法: 最近接触Android app开发,发现某某大厂的app,竟然不能通过app立即找到对应的commit id,对于走正常发布流程的app包,这个不是问题,因为通过标准化的构建流程发布,可以在构建系统中通过版本号追溯到对应的commit id(但是这套构建系统对版本号没有严格的约束,你可以build出两个一模一样版本号的app包。。。这样你基本上就完全懵逼了,还有说通过软件包时间来对应的,我。。。。。不多说啥了。。。。),而对于开发过程中,一些非标准流程发出的一些临时测试包,就完全失控了,根本无法确定一些软件包对应的commit id,没有准确的commit id你说你怎么找bug吧(不能理解这个的工程师,我觉得可以考虑转行做pd了)。 android app如何获取commit id: 本以为这是一个很简单的问题,应该有很多解决方法,不过我通过google,baidu,bing进行了一番搜索,竟然没有找到一篇完整的资料。只有自己来了: gradle:android app目前普遍通过gradle进行构建,而如何在gradle中调用shell系统命令获取git commit id就是问题的关键。 通过不断的搜索,终于找到一个方法: 'git describe'.execute().text 上面这行代码就可以在gradle中获取git commit id的信息,我们可以把该行返回字符串赋给一个String变量。但需要注意的是该行代码的返回字符串是带换行符的,可以通过subSequence()去除最后一个换行字符。 至此在gradle构建脚本中我们可以获取到了commit id,而如何将该commit id传递给java代码,此处不做说明,相信9成的android app开发工程师都比我这零基础的app入门者熟悉。 最后,实现以上功能大概花费了一个晚上的时间,这都不是key point,使我惊奇的是,在我8年多的软件开发过程中,我遇见无数不重视,甚至不了解软件包和commit id关联的重要性以及意义的“资深”工程师,如何定位问题,通过什么定位问题,如何使用版本管理工具,是工程师需要思考的。 补充: 终于发现一个详尽明确的说明:Android打包的那些事该链接中提供一个十分方便的处理方式: android { defaultConfig { resValue "string", "build_time", buildTime() resValue "string", "build_host", hostName() resValue "string", "build_revision", revision() } } def buildTime() { return new Date().format("yyyy-MM-dd HH:mm:ss") } def hostName() { return System.getProperty("user.name") + "@" + InetAddress.localHost.hostName } def revision() { def code = new ByteArrayOutputStream() exec { commandLine 'git', 'describe' standardOutput = code } return code.toString() } 可以通过以下方式在activity中进行调用: getString(R.string.build_time) getString(R.string.build_host) getString(R.string.build_revision)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册