java笔试手写算法面试题大全含答案

2025 年 Java 面试高频手写代码题(附核心实现) ‌题型‌‌核心知识点‌单例模式双重校验锁、枚举实现、静态内部类‌多线程同步wait/notify 机制、锁优化、阻塞队列‌数据结构操作链表反转、二叉树遍历(前/中/后序)、哈希表扩展‌算法实现快排/归并排序、二分查找、动态规划(背包问题)‌工程问题红包算法、字符串处理、LRU 缓存设计‌建议‌:面试前重点练习单例模式、多线程交替打印、链表操作和排序算法,结合代码手写训练与原理分析,确保能清晰解释实现细节和优化思路‌。 阅读详情

1.统计一篇英文文章单词个数。

public class WordCounting {

public static void main(String[] args) {

try(FileReader fr = new FileReader("a.txt")) {

int counter = 0;

boolean state = false;

int currentChar;

while((currentChar= fr.read()) != -1) {

if(currentChar== ' ' || currentChar == '\n'

|| currentChar == '\t' || currentChar == '\r') {

state = false;

}

else if(!state) {

state = true;

counter++;

}

}

System.out.println(counter);

}

catch(Exception e) {

e.printStackTrace();

}

}

}

补充:这个程序可能有很多种写法,这里选择的是Dennis M. Ritchie和Brian W. Kernighan老师在他们不朽的著作《The C Programming Language》中给出的代码,向两位老师致敬。下面的代码也是如此。

2.输入年月日,计算该日期是这一年的第几天。

public class DayCounting {

public static void main(String[] args) {

int[][] data = {

{31,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},

{31,29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

};

Scanner sc = new Scanner(System.in);

System.out.print("请输入年月日(1980 11 28): ");

int year = sc.nextInt();

int month = sc.nextInt();

int date = sc.nextInt();

int[] daysOfMonth = data[(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)?1 : 0];

int sum = 0;

for(int i = 0; i < month -1; i++) {

sum += daysOfMonth[i];

}

sum += date;

System.out.println(sum);

sc.close();

}

}

3.回文素数:所谓回文数就是顺着读和倒着读一样的数(例如:11,121,1991…),回文素数就是既是回文数又是素数(只能被1和自身整除的数)的数。编程找出11~9999之间的回文素数。

public class PalindromicPrimeNumber {

public static void main(String[] args) {

for(int i = 11; i <= 9999; i++) {

if(isPrime(i) && isPalindromic(i)) {

System.out.println(i);

}

}

}

public static boolean isPrime(int n) {

for(int i = 2; i <= Math.sqrt(n); i++) {

if(n % i == 0) {

return false;

}

}

return true;

}

public static boolean isPalindromic(int n) {

int temp = n;

int sum = 0;

while(temp > 0) {

sum= sum * 10 + temp % 10;

temp/= 10;

}

return sum == n;

}

}

4.全排列:给出五个数字12345的所有排列。

public class FullPermutation {

public static void perm(int[] list) {

perm(list,0);

}

private static void perm(int[] list, int k) {

if (k == list.length) {

for (int i = 0; i < list.length; i++) {

System.out.print(list[i]);

}

System.out.println();

}else{

for (int i = k; i < list.length; i++) {

swap(list, k, i);

perm(list, k + 1);

swap(list, k, i);

}

}

}

private static void swap(int[] list, int pos1, int pos2) {

int temp = list[pos1];

list[pos1] = list[pos2];

list[pos2] = temp;

}

public static void main(String[] args) {

int[] x = {1, 2, 3, 4, 5};

perm(x);

}

}

5.对于一个有N个整数元素的一维数组,找出它的子数组(数组中下标连续的元素组成的数组)之和的最大值。

下面给出几个例子(最大子数组用粗体表示):

数组:{ 1, -2, 3,5, -3, 2 },结果是:8

2) 数组:{ 0, -2, 3, 5, -1, 2 },结果是:9

3) 数组:{ -9, -2,-3, -5, -3 },结果是:-2

可以使用动态规划的思想求解:

public class MaxSum {

private static int max(int x, int y) {

return x > y? x: y;

}

public static int maxSum(int[] array) {

int n = array.length;

int[] start = new int[n];

int[] all = new int[n];

all[n - 1] = start[n - 1] = array[n - 1];

for(int i = n - 2; i >= 0;i--) {

start[i] = max(array[i], array[i] + start[i + 1]);

all[i] = max(start[i], all[i + 1]);

}

return all[0];

}

public static void main(String[] args) {

int[] x1 = { 1, -2, 3, 5,-3, 2 };

int[] x2 = { 0, -2, 3, 5,-1, 2 };

int[] x3 = { -9, -2, -3,-5, -3 };

System.out.println(maxSum(x1)); // 8

System.out.println(maxSum(x2)); // 9

System.out.println(maxSum(x3)); //-2

}

}

6.用递归实现字符串倒转

public class StringReverse {

public static String reverse(String originStr) {

if(originStr == null || originStr.length()== 1) {

return originStr;

}

return reverse(originStr.substring(1))+ originStr.charAt(0);

}

public static void main(String[] args) {

System.out.println(reverse("hello"));

}

}

7.输入一个正整数,将其分解为素数的乘积。

public class DecomposeInteger {

private static List<Integer> list = new ArrayList<Integer>();

public static void main(String[] args) {

System.out.print("请输入一个数: ");

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

decomposeNumber(n);

System.out.print(n + " = ");

for(int i = 0; i < list.size() - 1; i++) {

System.out.print(list.get(i) + " * ");

}

System.out.println(list.get(list.size() - 1));

}

public static void decomposeNumber(int n) {

if(isPrime(n)) {

list.add(n);

list.add(1);

}

else {

doIt(n, (int)Math.sqrt(n));

}

}

public static void doIt(int n, int div) {

if(isPrime(div) && n % div == 0) {

list.add(div);

decomposeNumber(n / div);

}

else {

doIt(n, div - 1);

}

}

public static boolean isPrime(int n) {

for(int i = 2; i <= Math.sqrt(n);i++) {

if(n % i == 0) {

return false;

}

}

return true;

}

}

8、一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法。

public class GoSteps {

public static int countWays(int n) {

if(n < 0) {

return 0;

}

else if(n == 0) {

return 1;

}

else {

return countWays(n - 1) + countWays(n - 2) + countWays(n -3);

}

}

public static void main(String[] args) {

System.out.println(countWays(5)); // 13

}

}

9.写一个算法判断一个英文单词的所有字母是否全都不同(不区分大小写)

public class AllNotTheSame {

public static boolean judge(String str) {

String temp = str.toLowerCase();

int[] letterCounter = new int[26];

for(int i = 0; i <temp.length(); i++) {

int index = temp.charAt(i)- 'a';

letterCounter[index]++;

if(letterCounter[index] > 1) {

return false;

}

}

return true;

}

public static void main(String[] args) {

System.out.println(judge("hello"));

System.out.print(judge("smile"));

}

}

10.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A= [1, 1, 2, 2, 3],处理之后的数组应当为A= [1, 2, 3]。

public class RemoveDuplication {

public static int[] removeDuplicates(int a[]) {

if(a.length <= 1) {

return a;

}

int index = 0;

for(int i = 1; i < a.length; i++) {

if(a[index] != a[i]) {

a[++index] = a[i];

}

}

int[] b = new int[index + 1];

System.arraycopy(a, 0, b, 0, b.length);

return b;

}

public static void main(String[] args) {

int[] a = {1, 1, 2, 2, 3};

a = removeDuplicates(a);

System.out.println(Arrays.toString(a));

}

}

11.给一个数组,其中有一个重复元素占半数以上,找出这个元素。

public class FindMost {

public static <T> T find(T[] x){

T temp = null;

for(int i = 0, nTimes = 0; i< x.length;i++) {

if(nTimes == 0) {

temp= x[i];

nTimes= 1;

}

else {

if(x[i].equals(temp)) {

nTimes++;

}

else {

nTimes--;

}

}

}

return temp;

}

public static void main(String[] args) {

String[]strs = {"hello","kiss","hello","hello","maybe"};

System.out.println(find(strs));

}

}

12.编写一个方法求一个字符串的字节长度?

public int getWordCount(String s){

int length = 0;

for(int i = 0; i < s.length(); i++)

{

int ascii = Character.codePointAt(s, i);

if(ascii >= 0 && ascii <=255)

length++;

else

length += 2;

}

return length;

}
 

java笔试算法题40道 兔子繁殖 半段质数 水仙花数 最大公约数 最小公倍数 数字排序等经典的编程问题 立即下载

相关推荐

Java面试笔试题大汇总(最全+详细答案)

Java面试笔试题大汇总(最全+详细答案) Java面试笔试题大汇总(最全+详细答案)

ABC循环打印

多线程循环打印问题 package jstudy.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @author Heroin X * @date 2020/9/7 19:56 */ public class ThreadTest1 { pr

Heorin X的博客 543

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

【面试】5道JAVA笔试算法题

5道JAVA笔试算法题 开始准备面试刷题咯~ 1.数据里有{1,2,3,4,5,6,7,8,9},请随机打乱顺序,生成一个新的数组(请以代码实现) import java.util.Arrays; //打乱数组 public class Demo1 { //随机打乱 public static int[] srand(int[] a) { int[] b = new int[a.le...

JJJikerUPUP的博客 8728

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1604

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比

本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。

weixin_29274969的博客 189

Java笔试手写算法面试题大全含答案

先给大家复习一下基础题!!! Java基础是java初学者的起点,是帮助你从小白入门到精通必学基础课程! 为初学者而著! Java300集>>>适合准备入行开发的零基础员学习Java,基于最新JDK13、IDEA平台讲解的,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。 配套学习:Java初学者入门教程>>> 1、统计一篇英文文章单词个数。 public class Wo...

编程领域的博客 1924

用友U8登录慢卡顿?别急着重启服务器,先检查UA_Message这张表(附SQL清理脚本)

本文针对用友U8登录慢卡顿问题,深入分析UA_Message表积压消息对系统性能的影响,并提供SQL清理脚本和优化方案。通过诊断、清理、索引优化和预防措施四步法,显著提升U8客户端登录速度,适用于后台管理和数据库维护场景。

weixin_28726671的博客 380

[javase基础] java笔试手写算法面试题大全含答案

10.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A= [1, 1, 2, 2, 3],处理之后的数组应当为A= [1, 2, 3]。5.对于一个有N个整数元素的一维数组,找出它的子数组(数组中下标连续的元素组成的数组)之和的最大值。2) 数组:{ 0, -2, 3, 5, -1, 2 },结果是:9。3) 数组:{ -9, -2,-3, -5, -3 },结果是:-2。数组:{ 1, -2, 3,5, -3, 2 },结果是:8。7.输入一个正整数,将其分解为素数的乘积。

Netty711的博客 222

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6894

C# WinForm项目目录结构详解:从入门到精通(附常见问题解决方案)

本文详细解析了C# WinForm项目目录结构,从解决方案与项目基础结构到核心文件功能,再到关键目录解析,帮助开发者快速掌握WinForm项目组织方式。文章还提供了常见问题解决方案,如引用丢失、配置文件不生效等,是WinForm开发从入门到精通的实用指南。

dream的博客 647

java面笔试_java笔试手写算法面试题大全含答案

java笔试手写算法面试题大全含答案1.统计一篇英文文章单词个数。public class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int currentChar;...

weixin_31659795的博客 289

Navicat Premium 12 永久激活保姆级教程(附最新补丁下载)

本文详细介绍了Navicat Premium 12的高效使用方法,从安装配置到高级功能应用,帮助用户充分发挥这款数据库管理工具的全部潜力。内容包括数据库连接管理、数据查询与编辑、数据同步与结构对比等核心功能,以及性能优化和最佳实践建议,提升数据库管理效率。

weixin_28834765的博客 644

java手写算法_java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。public class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int currentChar;while((currentChar...

weixin_34060561的博客 254

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2351

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java算法编程试题答案_java笔试手写算法面试题大全含答案

# java笔试手写算法面试题大全含答案**1.统计一篇英文文章单词个数。**```javapublic class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int...

weixin_42516668的博客 232

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java 字符串 算法 面试题_java笔试手写算法面试题大全含答案

java笔试手写算法面试题大全含答案1.统计一篇英文文章单词个数。public class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int currentChar;...

weixin_33901995的博客 436

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java笔试的算法题_java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。public class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int currentChar;while((currentChar...

weixin_30298733的博客 364

java题编写一个方法,java笔试手写算法面试题大全含答案(2)

7.输入一个正整数,将其分解为素数的乘积。public class DecomposeInteger {private static List list = new ArrayList();public static void main(String[] args) {System.out.print("请输入一个数: ");Scanner sc = new Scanner(System.in);...

weixin_42186728的博客 276

java算法大全_java经典算法_算法面试题大全含答案

1、Java中用到的线程调度算法是什么? 2、java二叉树算法面试题大全含答案 3、java笔试手写算法面试题大全含答案 4、java递归算法练习:使用递归算法写个程序计算n! 5、JVM的常见垃圾回收算法 6、《java算法大全》第一期 7、《java算法大全》第三期 8、《java算法大全》第二期 9、《java算法大全》第五期 10、《java算法大全》第四期 11、《java经典算法》之...

songfei_dream的专栏 1万+

2019史上最全java面试题题库大全800题含答案

2019史上最全java面试题题库大全_辟邪剑谱葵花宝典800题含答案 1、 meta标签的作用是什么 2、 ReenTrantLock可重入锁(和synchronized的区别)总结 3、 Spring中的自动装配有哪些限制? 4、 什么是可变参数? 5、 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain mode...

weixin_44626952的博客 5万+

网易历届笔试面试题整理大全

整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题    常见算法面试题   数据库常见面试题  操作系统常见面试题   C/C++常见面试题  大数据常见面试   python常见面试 来源:网易笔试面试圈&gt;&gt; 1、2019网易实习生招聘编程题集合 2、2018网易校园招聘编程题真题集合 3、2018网易前端实习笔试题 4、2018网易...

wodwl的专栏 1万+

华为历届笔试面试题整理大全

整理了一下华为往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题    常见算法面试题   数据库常见面试题  操作系统常见面试题   C/C++常见面试题  大数据常见面试   python常见面试 来源:华为笔试面试圈&gt;&gt; 1、2018华为校招机试题目 2、2018华为届校园招聘软件开发岗笔试题 3、2017华为笔试题及答案 4、2017年华为笔试...

wodwl的专栏 4万+
上一篇: 微信开发之一键获取好友详情的技术实现
下一篇: 微信开发之一键修改群聊备注的技术实现
普通网友
博客等级 码龄4年 283粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值